分类 SpringBoot 下的文章

之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}catch,看着一点都不优雅,憋了这么久,今天终于决定对所有异常实施统一处理的方案。

- 阅读剩余部分 -

如何监控springboot的健康状况

SpringBoot1.5.19.RELEASE

一、使用Actuator检查与监控

actuaotr是spring boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节。

  1. 在pom文件中添加Actuator坐标

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  2. 在全局配置文件中设置关闭安全限制

    management.security.enabled=false
  3. 运行,会发现控制台打印信息变多了

1552918464528.png

  1. 直接访问
    eg: http://localhost:8080/health http://localhost:8080/dump http://localhost:8080/beans 等
具体可参考:https://www.cnblogs.com/baidawei/p/9183531.html

二、Spring Boot Admin

Spring Boot Admin 提供了很多功能,如显示 name、id 和 version,显示在线状态,Loggers 的日志级别管理,Threads 线程管理,Environment 管理等。

  1. 访问spring boot admin的github页面:https://github.com/codecentric/spring-boot-admin

    -------以下内容在服务端操作:

  2. 在pom文件中添加spring boot admin 坐标

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>1.5.7</version>
        </dependency>
    </dependencies>
  3. 在启动类中增加注解:@EnableAdminServer

    @SpringBootApplication
    @EnableAdminServer
    public class SpringbootHelloworldApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootHelloworldApplication.class, args);
        }
    }

    -------以下内容在客户端操作:

  4. 客户端(另一个项目)pom文件添加依赖

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>1.5.7</version>
    </dependency>
  5. 修改properties文件

    #服务端的ip地址和端口
    spring.boot.admin.url: http://localhost:8383
    management.security.enabled=false
  6. 此时客户端的端口是:8080 ; 服务端的端口是8383
  7. 先启动服务端,打开网页:http://localhost:8383 (什么都没有,因为客户端还没启动)

1552920784237.png

  1. 启动客户端

1552922668383.png

Spring Boot核心注解

1@SpringBootApplication代表是Spring Boot启动的类
2@SpringBootConfiguration通过bean对象来获取配置信息 (被@Configuration修饰所以才能够获取配置信息)
3@Configuration通过对bean对象的操作替代spring中的xml文件
4@EnableAutoConfiguration完成一些初始化环境的配置
5@ComponentScan完成spring的组件扫描。替代之前在xml文件中配置组件扫描的配置(context:component-scan pacage=”....”)
6@RestController1,表示一个 Controller。2,表示当前这个 Controller 下的所有的方法都会以 json 格式的数据响应。 和 @Controller + @ResponseBody组合使用一样。

1.@SpringBootApplication —— Spring Boot启动的类

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

    @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude")
    Class<?>[] exclude() default {};

    @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")
    String[] excludeName() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
    String[] scanBasePackages() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
    Class<?>[] scanBasePackageClasses() default {};

}

其中有3个注解是我们所关心的:

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan

2.@SpringBootConfiguration —— 通过bean对象来获取配置信息

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

这个注解是空的,什么都没有,但是他被另一个注解所修饰——@Configuration

3.@Configuration —— 通过对bean对象的操作替代Spring中的xml文件

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}

4.@EnableAutoConfiguration —— 根据导入的jar包创建启动环境

@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    /**
     * Exclude specific auto-configuration classes such that they will never be applied.
     * @return the classes to exclude
     */
    Class<?>[] exclude() default {};

    /**
     * Exclude specific auto-configuration class names such that they will never be
     * applied.
     * @return the class names to exclude
     * @since 1.3.0
     */
    String[] excludeName() default {};

}

5.@ComponentScan —— 完成spring的组件扫描

代替了xml文件中的:

<context:component-scan pacage=”....”></context:component-scan>

6.@RestController —— 一个Controller 且该controller下的所有数据以json格式的数据响应

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    String value() default "";
}

他被@Controller 和 @ResponseBody 同时修饰 , 因此@RestController = @Controller + @ResponseBody

SpringBoot多环境配置

Spring Boot 1.5.19.RELEASE

假设项目中需要3个环境——开发、测试、生产

profile :代表的就是一个环境变量

语法结构:application-{profile}.properties

需求:

application-dev.properties 开发环境
application-test.properties 测试环境
application-prod.properties 生产环境

具体步骤:

  1. 在src/main/resources/ 新建以上三个文件
#application-dev.properties
server.port=8181
#application-test.properties
server.port=8282
#application-prod.properties
server.port=8383
  1. 将项目打包
    右键项目——Run As——Maven build..

1552914269149.png

打包完成后可在 target 文件夹中看到 springboot-helloworld-0.0.1-SNAPSHOT.jar 文件。

把项目拷贝到某一路径下,例如D盘根目录;

打包时如出现以下错误:

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

https://jingyan.baidu.com/article/6dad5075250734a123e36efa.html

  1. 运行项目
java -jar xxx.jar --spring.profiles.active={profile}

① 打开cmd输入 d: 进入D盘根目录
② 输入上述代码

java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

③ 运行成功,端口为8181端口
④ 重复上述命令dev改成testprod,发现端口号改为了8282和8383