在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全  HTML/ spring boot 多配置文件加載,統(tǒng)一加載

spring boot 多配置文件加載,統(tǒng)一加載

準備從spring mvc 遷移到spring-boot 技術(shù)棧,有個關(guān)于多配置文件的疑惑,在看的過程中發(fā)現(xiàn)spring boot 的配置是個很大的優(yōu)點,但是并沒有真正體會到其中的優(yōu)點。

假如有多個(>6)個properties文件,大都是關(guān)于一些上下游地址的配置,數(shù)據(jù)庫配置,以及一些默認變量。但是看spring-boot 需要對每個配置文件有個配置類,然后在里面聲明配置變量,然后使用@Value注解使用。

問題:
有沒有一個更好的方式,能夠統(tǒng)一對所有的配置文件變量,加載都spring 容器里面,直接使用,不需要寫多個配置bean?

thx

回答
編輯回答
不歸路

SpringBoot有個“約定大于配置”的特點,也就是說,很多必須的配置其實都是有默認的值(當然key也是默認的,比如server.port等),這些配置只需要你在配置文件里面寫好,然后引用配置文件,不需要再另外配置類進行引入。還有一些是自定義的配置,比如你要配置個默認的系統(tǒng)角色system.role.default,這些自定義的配置就需要用配置類進行讀取了。

2017年12月6日 08:50
編輯回答
乖乖瀦

不使用配置bean也可以,首先實例化bean中要有g(shù)et/set方法,然后在實例化bean時添加屬性前綴,@ConfigurationProperties("spring.datasource")

    @Bean
    @ConfigurationProperties("spring.datasource.druid")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
2018年7月7日 18:07
編輯回答
傲寒

有的,你需要幾個注解,對應(yīng)的配置類型的變量提升為一個類的Config,如下

@Data
@Component
@ConfigurationProperties(prefix = "wechat")
public class WechatAccountConfig {

    /**
     * 公眾平臺Id
     */
    private String mpAppId;

    /**
     * 公眾平臺密鑰
     */
    private String mpAppSecret;

    /**
     * 開發(fā)平臺Id
     */
    private String openAppId;

    /**
     * 開發(fā)平臺密鑰
     */
    private String openAppSecret;

    /**
     * 商戶號
     */
    private String mchId;

    /**
     * 商戶號密碼
     */
    private String mchKey;

    /**
     * 證書路徑
     */
    private String keyPath;

    /**
     * 微信支付異步通知地址
     */
    private String notifyUrl;

    /**
     * 微信模板Id
     */
    private Map<String, String> templateId;
}

@Data是快速getter和setter,@Component注解Wie組件,另一個是配置其前綴
之后你僅需要在yml文件配置后就行

wechat:
  mpAppId: xxxx
  mpAppSecret: xxxx
  openAppId: xxxx
  openAppSecret: xxx
  mchId: xxx
  mchKey: xxx
  keyPath: /xx/xx/xx
  notifyUrl: http://xxxx.com/sb/pay/notify
  templateId:
    orderStatus: xxx

之后你在對應(yīng)的主要配置類調(diào)用get屬性就行

@Component
public class WechatMpConfig {

    @Autowired
    private WechatAccountConfig wechatAccountConfig;

    @Bean
    public WxMpService wxMpService(){
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
        return wxMpService;
    }

    @Bean
    public WxMpConfigStorage wxMpConfigStorage(){
        WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
        wxMpConfigStorage.setAppId(wechatAccountConfig.getMpAppId());
        wxMpConfigStorage.setSecret(wechatAccountConfig.getMpAppSecret());
        return wxMpConfigStorage;
    }

}
2017年11月6日 05:54