万百入年许老

万百入年许老 查看完整档案

厦门编辑湖南工业大学  |  数字媒体艺术 编辑厦门  |  自动化测试工程师 编辑 www.damengsanqian.com 编辑
编辑

不秃顶、不猝死,顺顺利利活到100可以吗?

个人动态

万百入年许老 发布了文章 · 9月17日

Spring boot 多文件配置

作用

  1. 开发、发布过程中,需要切换多种环境(如数据库链接,端口号等)
  2. 网上搜索了,结果搜到很多辣鸡文章,漏了关键信息配不成功,所以写下亲测可用的过程,避免后面的老铁被耽误
  3. 最后终于找到了一篇正确的,不过内容不精练,重新整理获得,大家也可以直接看原文章:
https://blog.csdn.net/xiaocho...

主要步骤

  1. 在pom.xml添加配置
  2. 在resources添加对应环境的配置文件
  3. 运行指定配置

环境

idea2020
spring-boot 2.3.1RELEASE
JDK 14.0.2

详细步骤

1.在pom.xml中添加配置

添加环境

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <environment>dev</environment>  <!-- 环境名,可以任意名字,在资源配置中使用 ${environment}就能获取值 -->
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>  <!-- 默认环境,当使用mvn启动不指定配置时,默认使用这个环境 -->
        </activation>
    </profile>
    <profile>
        <id>beta</id>
        <properties>
            <environment>beta</environment>  <!-- beta环境 -->
        </properties>
    </profile>
</profiles>

添加资源配置

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.properties  </include><!-- 原配置文件 -->
                <include>application-${environment}.properties</include>  <!-- 带环境的配置文件,注意使用"-"连接,否则无法生效 -->
                <include>**/*.xml</include>  <!-- 其他资源文件,不填写会导致程序运行时找不到文件 -->
                <include>**/*.sql</include>  <!-- 其他资源文件,不填写会导致程序运行时找不到文件 -->
            </includes>
            <filtering>true</filtering>  <!-- 过滤,不知道啥效果,有兴趣的可以自己修改测试下 -->
        </resource>
    </resources>
</build>

此时在Maven窗口会看到配置选项

image.png

添加配置文件

image.png

添加application-dev.properties
添加application-beta.properties
两个文件名对应pom.xml中的 application-${environment}.properties

环境配置文件是在原配置上叠加覆盖的

# 如application.properties中
server.port=8080

# 如application-dev.properties中
server.port=8081
spring.datasource.username=dev

# 如application-beta.properties中
server.port=8082
spring.datasource.username=beta

结果dev环境中:port=8081,username=dev
beta环境中:port=8082,username=beta

使用配置

启动的命令后加上 -P 配置名称

mvnw clean spring-boot:run          # 使用默认配置(此例子中是dev)
mvnw clean spring-boot:run -P beta  # 使用beta环境
mvnw clean spring-boot:run -P dev   # 使用dev环境

mvnw clean package                  # 使用默认配置(此例子中是dev)
mvnw clean package -P beta          # 使用beta环境
mvnw clean package -P dev           # 使用dev环境

查看结果

很明显可以观察到,指定不同环境启动时,端口号是对应的配置文件上的

查看原文

赞 0 收藏 0 评论 0

万百入年许老 发布了文章 · 9月8日

SpringBoot 全局异常处理

为什么会有这篇文章

前后端分离系统,使用SpringBoot搭建后端。
希望请求结果可以按照HttpStatus返回。
搜索了不少关于SpringBoot的全局异常处理,大部分都是返回200,再在消息体中加入code,感觉这样处理不符合规范,所以有了以下内容。

步骤

  1. 创建异常类
  2. 创建全局异常处理
  3. 异常使用上面创建的异常类抛出

代码

异常类 BizException
该异常类使用最简单结构,仅有状态码和自定义信息,可根据自己需要拓展。

import org.springframework.http.HttpStatus;

/**
 * 错误处理类
 */
public class BizException extends RuntimeException {

    private HttpStatus status;
    private String message;

    public BizException(HttpStatus status, String message) {
        super(message);
        this.status = status;
        this.message = message;
    }

    public BizException(HttpStatus status) {
        this(status, status.getReasonPhrase());
    }

    public HttpStatus getStatus() {
        return status;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

全局异常处理 GlobalExceptionHandler
该类会根据抛出类型,自动进入对应处理类。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 全局异常处理
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = BizException.class)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> bizExceptionHandler(HttpServletRequest req, BizException e) {
        Map<String, Object> map = new HashMap<>();
        map.put("message", e.getMessage());
        return new ResponseEntity<>(map, e.getStatus());
    }

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> exceptionHandler(HttpServletRequest req, Exception e) {
        Map<String, Object> map = new HashMap<>();
        map.put("message", e.getMessage());
        return new ResponseEntity<>(map, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在任意想要的地方抛出BizException异常

throw new BizException(HttpStatus.UNAUTHORIZED);
throw new BizException(HttpStatus.UNAUTHORIZED,"未登录");

请求对应连接,可以观察到状态码已变更为401,并附有信息
image

参考资料:
小白的springboot之路(十)、全局异常处理 - 大叔杨 - 博客园
小白的springboot之路(十一)、构建后台RESTfull API
springboot自定义http反馈状态码 - Boblim - 博客园

首发于知乎
SpringBoot 全局异常处理

查看原文

赞 1 收藏 0 评论 0

万百入年许老 发布了文章 · 5月10日

解决 failed to download metadata for repo 'AppStream'

起因

初学centos,使用yum install xxx 命令时,一直报错

failed to download metadata for repo 'AppStream'

网上各种搜索方法都是不行的

解决这个问题的正确姿势

网络连接问题,连不上外网,就这么简单
不信你ping一下百度试试
我在使用vbox的时候网络设置错误导致的,设置正确后就没问题了,别听其他博客里说的各种删东西
以上

查看原文

赞 0 收藏 0 评论 0

万百入年许老 发布了文章 · 4月18日

Linux安装Java14

ubuntu安装Java14环境

ubuntu18.4.04
jdk14.0.1

下载JDK

  • 进入官网下载JDK14
https://www.oracle.com/java/t...
  • 选择 Java SE 14 > Oracle JDK >JDK Download
  • 选择Linux版本(这次选择的是jdk-14.0.1_linux-x64_bin.tar.gz)
  • 点击下载,同意用户协议,下载到本地
  • 下载可能需要登录Oracle账号
网友分享账号
https://jingyan.baidu.com/art...
账号:2696671285@qq.com
密码:Oracle123

Linux中创建java目录

  • 在/usr/目录下创建java目录
$ sudo mkdir /usr/java

解压Java安装包

  • 将jdk文件移动到/usr/java
$ mv [jdk源文件] /usr/java
  • 解压jdk文件
$ tar zxvf jdk-14.0.1_linux-x64_bin.tar.gz
  • 得到解压文件夹 /usr/java/jdk-14.0.1

生成jre文件

  • 解压后,文件夹中并没有jre文件夹,需要生成
cd /usr/java/jdk-14.0.1
bin/jlink --module-path jmods --add-modules java.desktop --output jre

配置环境环境

  • 使用vim打开profile文件
$ sudo vim /etc/profile
  • 在文件添加如下内容并保存
set java environment
JAVA_HOME=/usr/java/jdk-14.0.1     
JRE_HOME=/usr/java/jdk-14.0.1/jre     
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
  • 让修改生效
$ source /etc/profile
  • 如果不行就重启 :P

测试是否成功

$ java -version

参考资料

https://www.cnblogs.com/wjup/...
https://www.cnblogs.com/qingt...
查看原文

赞 1 收藏 0 评论 1

万百入年许老 关注了专栏 · 4月13日

民工哥技术之路

公众号:民工哥技术之路、《Linux系统运维指南 从入门到企业实战》作者。专注系统架构、高可用、高性能、高并发,数据库、大数据、数据分析、Python技术、集群中间件、后端等开源技术分享。

关注 16078

万百入年许老 关注了用户 · 4月13日

日拱一兵 @tanrigongyibing

欢迎关注,公众号「日拱一兵」,以读侦探小说思维趣味轻松学习Java技术

送你《1000G 免费精选技术学习资料》(2020 年最新)
https://mp.weixin.qq.com/s/9p...

关注 19392

万百入年许老 关注了专栏 · 4月13日

Python数据科学

微信公众号:Python数据科学,分享数据科学干货,包括数据采集,数据分析,以及数据挖掘。

关注 3073

万百入年许老 关注了专栏 · 4月13日

SegmentFault 行业快讯

第一时间为开发者提供行业相关的实时热点资讯

关注 25113

万百入年许老 关注了专栏 · 4月13日

TalkingData

TalkingData 开发同学们的经验与心得,欢迎一同探讨!

关注 3764

万百入年许老 关注了标签 · 4月13日

java

Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

Java编程语言的风格十分接近 C++ 语言。继承了 C++ 语言面向对象技术的核心,Java舍弃了 C++ 语言中容易引起错误的指針,改以引用取代,同时卸载原 C++ 与原来运算符重载,也卸载多重继承特性,改用接口取代,增加垃圾回收器功能。在 Java SE 1.5 版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对 Java 语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”。

版本历史

重要版本号版本代号发布日期
JDK 1.01996 年 1 月 23 日
JDK 1.11997 年 2 月 19 日
J2SE 1.2Playground1998 年 12 月 8 日
J2SE 1.3Kestrel2000 年 5 月 8 日
J2SE 1.4Merlin2002 年 2 月 6 日
J2SE 5.0 (1.5.0)Tiger2004 年 9 月 30 日
Java SE 6Mustang2006 年 11 月 11 日
Java SE 7Dolphin2011 年 7 月 28 日
Java SE 8JSR 3372014 年 3 月 18 日
最新发布的稳定版本:
Java Standard Edition 8 Update 11 (1.8.0_11) - (July 15, 2014)
Java Standard Edition 7 Update 65 (1.7.0_65) - (July 15, 2014)

更详细的版本更新查看 J2SE Code NamesJava version history 维基页面

新手帮助

不知道如何开始写你的第一个 Java 程序?查看 Oracle 的 Java 上手文档

在你遇到问题提问之前,可以先在站内搜索一下关键词,看是否已经存在你想提问的内容。

命名规范

Java 程序应遵循以下的 命名规则,以增加可读性,同时降低偶然误差的概率。遵循这些命名规范,可以让别人更容易理解你的代码。

  • 类型名(类,接口,枚举等)应以大写字母开始,同时大写化后续每个单词的首字母。例如:StringThreadLocaland NullPointerException。这就是著名的帕斯卡命名法。
  • 方法名 应该是驼峰式,即以小写字母开头,同时大写化后续每个单词的首字母。例如:indexOfprintStackTraceinterrupt
  • 字段名 同样是驼峰式,和方法名一样。
  • 常量表达式的名称static final 不可变对象)应该全大写,同时用下划线分隔每个单词。例如:YELLOWDO_NOTHING_ON_CLOSE。这个规范也适用于一个枚举类的值。然而,static final 引用的非不可变对象应该是驼峰式。

Hello World

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译并调用:

javac -d . HelloWorld.java
java -cp . HelloWorld

Java 的源代码会被编译成可被 Java 命令执行的中间形式(用于 Java 虚拟机的字节代码指令)。

可用的 IDE

学习资源

常见的问题

下面是一些 SegmentFault 上在 Java 方面经常被人问到的问题:

(待补充)

关注 104945

认证与成就

  • 获得 2 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 4月13日
个人主页被 124 人浏览