SpringBoot + properties 简单使用

如果你觉得本文对你有帮助,欢迎赞赏[1]

SpringBoot + properties 简单使用

 

往前回顾:

上一节简单的介绍了SpringBoot + Dubbo + Mybatis
实现分布式服务确定了在服务提供主要包括两部分,
一个是暴露服务,
一个是服务实现,
暴露服务:即我们平常开发中所使用的的接口。
服务实现:与我们平常的服务一样,对接口进行实现,
比较特别的是,我们这里需要使用到Dubbo 的 @Service
 注解在配置方面,为了防止端口冲突,我们各自定义了
服务端口注解:server.port=6660和server.port=6661
通过spring.dubbo.scan扫描使用的dubbo接口所在包位置
再有就是引用了些许SpringBoot官方的包。
另外,在Mybatis如果Mapper.xml与Mapper.class不在
同一个包下或者不同名,就必须使用配置mapperLocations
指定mapper.xml的位置,通过namespace的值来确定对应的
Mapper.class的。
记得在启动类加 mapper 接口类扫描包配置
@MapperScan
("com.herbert.hdd.doorplate.dubbo.dao")

详见:
SpringBoot 整合Dubbo构建分布式服务

SpringBoot + Dubbo + Mybatis 分层实现分布式服务

项目构建

配置文件

在src/main/resource目录下建立:

application.properties文件

spring.profiles.active=dev
server.port=6663

application-dev.properties文件

home.name=摘星族
home.city=BeiJing
home.desc=I love ${home.name} city in ${home.city}.

application-prod.properties文件

home.name=Herbert
home.city=ShangHai
home.desc=I love ${home.name} city in ${home.city}.

springboot的配置文件命名约定,结合active可在不同环境引用不同的properties外部配置
application.properties配置文件欲被SpringBoot自动加载,需要放置到指定的位置:src/main/resource目录下,一般自定义的配置文件也位于此目录之下。

applicaiton.properties属性绑定JavaBean
我们需要与属性绑定的JavaBean的类,在定义顶部加
@Component注解
和@ConfigurationProperties(prefix="key")注解,
前者的目的是为了这个JavaBean可以被SpringBoot项目启动时候被扫描到并加载到Spring容器之中,后者@ConfigurationProperties(prefix="key")注解加注在JavaBean类定义之上,为属性配置注解,更直接点的说法就是属性绑定注解。如果想要绑定或者验证一些来源自.properties文件中的额外属性时,你可以在一个标注的@Configuration的类的注有@Bean注解的方法或者一个类之上加注这个注解。我们完全可以将其理解为绑定专用注解。它的作用就是将指定的前缀的配置项的值与JavaBean的字段绑定,这里要注意,为了绑定的成功,一般将字段的名称与配置项键的最后一个键名相同,这样整个键在去掉前缀的情况下就和字段名称一致,以此来进行绑定。

所以,我们需要去建立一个实体类,通过@ConfigurationProperties(prefix="key")注解绑定JavaBean

HomeProperties 实体

package com.herbert.springboot.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 公众号详情
 */
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {

    /**
     * 公众号名称
     */
    private String name;

    /**
     * 公众号所在城市
     */
    private String city;

    /**
     * 描述
     */
    private String desc;

    public String getName() {
        return name;
    }

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

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "HomeProperties{" +
                "name='" + name + '\'' +
                ", city='" + city + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

 

PropertiesApplication 启动类

package com.herbert.springboot;

import com.herbert.springboot.properties.HomeProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动类
 */
@SpringBootApplication
public class PropertiesApplication implements CommandLineRunner {

    @Autowired
    private HomeProperties homeProperties;

    public static void main(String[] args) {

        SpringApplication.run(PropertiesApplication.class, args);

    }

    @Override
    public void run(String... strings) throws Exception {
        System.out.println(homeProperties.toString());

    }
}

在使用SpringBoot构建项目时,我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner。CommandLineRunner是一个接口,我们需要时,只需实现该接口就行。如果存在多个加载的数据,我们也可以使用@Order注解来排序。

我们在开发过程中会有这样的场景:需要在容器启动的时候执行一些内容,比如:读取配置文件信息,数据库连接,删除临时文件,清除缓存信息,在Spring框架下是通过ApplicationListener监听器来实现的。在Spring Boot中给我们提供了两个接口来帮助我们实现这样的需求。这两个接口就是CommandLineRunner和ApplicationRunner,他们的执行时机为容器启动完成的时候。

测试

在spring.profiles.active=dev的时候启动项目后运行

HomeProperties{name='摘星族', city='BeiJing', desc='I love 摘星族 city in BeiJing.'}

在spring.profiles.active=prod 的时候启动项目后运行

HomeProperties{name='Herbert', city='ShangHai', desc='I love Herbert city in ShangHai.'}

 欢迎关注公众号:

 


版权声明:本文为weixin_41986096原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>