Spring Boot基本配置

本文参考 javaEE 开发的颠覆者 SpringBoot 实战第一版

基本配置

入口类和 @SpringBootApplication

  Spring Boot 通常有一个名为 *Application 的入口类,且入口类有一个 main 方法,这个 main 方法就是标志的 java 应用入口方法。调用 main 方法就可以启动 springboot 应用。

  @SpringBootApplication 是 springboot 的核心注解,它是一个组合注解

  涉及到启动 Springboot 项目的核心注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。

  注:@EnableAutoConfiguration 可以让 SpringBoot 根据类路径中的 jar 包依赖为当前项目进行配置。

    例如:添加了 spring-boot-start-web 依赖,就会自动添加 Tomcat 与 SpringMVC 依赖,且会对 Tomcat 和 SpringMVC 进行配置。

       添加了 spring-boot-start-data-jpa 依赖,springboot 就会进行 JPA 的相关配置。

  注:SpringBoot 会自动扫描 @SpringBootApplication 所在类的同级包以及下级包里的 Bean(若为 JPA 还会扫描 @Entity)。所以一般入口类都会放在包的根目录下。

关闭特定的自动配置

  通过 @SpringBootApplication 注解的参数 exclude 参数实现:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

定值 Banner

  (个人认为这个有点恶趣味啊,哈哈。我还是很喜欢默认的 banner)

  1. 修改 banner

    在 springboot 启动时会有默认的图标:

    

  在 src/main/resources 下新建一个 banner.txt

  可以在 http://patorjk.com/software/taag 网站生成字符,我敲入的是 memeda,然后将生成的字符复制给 banner.txt。

  再启动时就可以实现改变:

    

  2. 关闭 banner

  (1)修改 main 中的代码:

    注:这一段是与书中有出入的,书中使用的是 app.setShowBanner(false)

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(LilinlearnApplication.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
    }

  (2)或使用 fluent API 修改为:

    public static void main(String[] args) {
        new SpringApplicationBuilder(LilinlearnApplication.class).bannerMode(Banner.Mode.OFF)
                .run(args);
    }

SpringBoot 配置文件

  SpringBoot 使用一个全局的配置文件 application.properties 或 application.yml, 配置文件路径:src/main/resource 目录下或类路径下的 /config 下。

    注:这两种配置文件的区别是格式不一致,示例均采用.properties 格式,但实际上以后的主流应该是以 yml 为主的。

  示例:

    修改端口和与默认路径:

    server.port=9090

    server.context-path=/helloboot。

starter pom

  Springboot 为我们提供了简化企业级开发绝大多数场景的 starter pom。只要使用了所需要的 starter pom,SpringBoot 就会为我们提供自动装配的 Bean。

  还有很多,具体的可以看官方文档,或者自己去书上看。

使用 XML 配置

  SpringBoot 提倡零配置,即无 XML 配置,但实际上有些特殊的配置需要使用 XML 配置。我们可以通过 Spring 提供的 @ImportResource 来加载 XML 配置

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

 

外部配置

  SpringBoot 可以使用 properties 文件、yaml 文件或者命令行参数作为外部配置。

  命令行参数配置:

    SpringBoot 可以基于 jar 包运行,打成 jar 包的程序可以直接通过下面的命令行运行,并修改 Tomcat 端口号:

java -jar xx.jar --server.port=9090

  常规属性配置:

    只需要在 application.properties 中定义属性,直接在类中使用 @Value 注入即可。

    (1)在 application.properties 中增加属性:

      book.author=huyifei

      book.name=xueshanfeihu

    (2)在类中获取:

@RestController
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class LilinlearnApplication {
@Value(</span>"${book.author}"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String author;

@Value(</span>"${book.name}"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String name;

@Autowired
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Author authora;
@RequestMapping(</span>"/"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String index() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> "??????" + author + name + "    " + authora.getAge() + "  |  " +<span style="color: rgba(0, 0, 0, 1)"> authora.getName();
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> main(String[] args) {
    </span><span style="color: rgba(0, 0, 255, 1)">new</span> SpringApplicationBuilder(LilinlearnApplication.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">)
            .bannerMode(Banner.Mode.OFF)
            .run(args);
}

}

  类型安全的配置(基于 properties)

   若按照常规属性进行注入,你会发现如果多次复用会出现很多冗余的代码,SpringBoot 就为我们提供了方法,使用 @ConfigurationProperties 将 properties 属性和一个 Bean 及其属性关联,从而实现安全配置。

   在 application.properties 上添加:

    mail.name=eamil

    mial.age=18

   我们也可以新建一个 properties 文件,这时我们需要使用 @PropertiesSource 将添加的文件的位置指定。

    注:这里与书中内容不同,书中的 @ConfigurationProperties 的 locations 属性并不存在(看了源码确实没有),可能是因为 SpringBoot 的版本不同(书中 1.3,现在使用的是 1.5.9)    

@Component
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "mail")
public class Author {
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String name;

</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String age;

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getName() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setName(String name) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.name =<span style="color: rgba(0, 0, 0, 1)"> name;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String getAge() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> age;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setAge(String age) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.age =<span style="color: rgba(0, 0, 0, 1)"> age;
}

}

  日志配置

    默认情况下,SpringBoot 使用 Logback 作为日志框架。

    配置日志级别:

      logging.file=D:/mylog/log.log

    配置日志文件,格式为 logging.level. 包名 = 级别:

      logging.level.org.springframework.web=DEBUG

  Profile 配置

    Profile 是 Spring 针对不同环境不同配置的支持。

    格式为:application-{profile}.properties。

    只需要在 application.properties 中设置 spring.profiles.active=prod 来指定活动的 profile 即可。

    注:这样可以实现测试环境、开发环境、线上环境分离。

 

 

本文内容是书中内容兼具自己的个人看法所成。可能在个人看法上会有诸多问题(毕竟知识量有限,导致认知也有限),如果读者觉得有问题请大胆提出,我们可以相互交流、相互学习,欢迎你们的到来,心成意足,等待您的评价。