SpringBoot入门篇

  • 添加依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 应用启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  • 注解@SpringBootApplication说明

@SpringBootApplication是一个组合注解。

@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 {

}

@SpringBootConfiguration也是一个组合注解。

@Configuration:如果一个类上添加了@Configuration,代表是一个JavaConfig,可以充当Spring容器,相当于Spring的配置文件。

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

}

@EnableAutoConfiguration也是一个组合注解。

@AutoConfigurationPackage:表示将主配置类(即@SpringBootApplication 标注的类)所在的包及其子包里的所有类都纳入 Spring 容器。

@Import 注解,是 Spring 的底层注解。它给容器中导入一个了组件 (AutoConfigurationImportSelector.class)。

AutoConfigurationImportSelector 确定了导入哪些组件到选择器,这些组件会被自动添加到 Spring 容器。

可以看spring-boot-autoconfigure.jar 下 META-INF/spring.factories文件以及jar里面的自动配置相关类,这些自动配置类作用就是帮我们自动配置好,来达到简化开发、提供效率的目的。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

}
  • Actuator监控终端

添加依赖

    <!-- actuator监控器 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

在application.yml添加info信息

info:
  company:
    name: xcj
    url: http://www.xcj.com
    address: Bejing,China
    
  author:
    name: 张三
 
  project: #从pom文件中读取指定的属性值project.groupId、project.artifactId
    groupid: @project.groupId@
    artifactid: @project.artifactId@

 访问地址:http://localhost:8088/homepage-dev/actuator/info,就可以看到输出:

{"company":{"name":"abc","url":"http://www.abc.cpm","address":"Bejing,China"},"author":{"name":"张三"},"project":{"groupid":"xcj.homepage","artifactid":"xcj.homepage"}}

 

修改actuator终端

management:
  server:
    port: 9999 # 指定actuator监听的端口号
    servlet:
      context-path: /dev # 指定actuator的上下文路径
  endpoints:
    web:
      base-path: /base # 指定actuator监控终端的基本路径
      exposure:
        include: "*" # 开启所有监控终端
        exclude: ["env", "health"] # 指定要关闭的监控终端

访问地址就变成了:http://localhost:9999/dev/base

  • 自定义异常处理页面

同一异常处理,如404错误,只需要定义一个/resources/public/error/404.html页面即可。

  •  多配置式多环境选择

开发环境、生产环境切换,配置文件有application.yml、application-dev.yml 、application-pro.yml。

在application.yml中配置如下:

spring:
  profiles:
    active: dev #默认为开发环境
    # active: dev #默认为生产环境

如果业务处理类,也需实现开发环境和生产环境的区别,则可以使用@Profile注解实现。

@Service
@Profile("dev")
public class MyServiceImpl implements MyService {

}
  •  读取自定义配置

通过@Value注解和${}符号,来获取properties或yml文件里配置的属性值。

    @Value("${server.port}")
    private int port;

 通过@PropertySource指定要读取的配置文件名称和@ConfigurationProperties指定要读取的属性前缀,来读取譬如demo.properties里定义的属性键值对。

@Component // 生命周期交给Spring容器管理
@PropertySource(value = "classpath:demo.properties",encoding = "UTF-8") // 指定要读取的配置文件名称
@ConfigurationProperties("xcj.demo") // 指定要读取的属性的前缀
public class Demo {

    private String name;
    
    private List list;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }
    
}

 

demo.properties

xcj.demo.name=Demo
xcj.demo.list[0]=1
xcj.demo.list[1]=2
xcj.demo.list[2]=3

 

 

 

posted @ 2020-05-01 12:12  时光编辑师  阅读(165)  评论(0)    收藏  举报