SpringBoot(五):@ConfigurationProperties配置參數綁定


在springmvc或其他ssh框架中如果我們要實現一個配置參數的加載,需要使用代碼實現讀取properties文件等操作,或者需要使用其他屬性@value(name="username")等配置操作。但是在springboot中就比較簡單操作:

1)自定義配置參數綁定:通過使用@ConfigurationProperties和@Component注解自定義參數配置類,之后程序啟動時將自動加載application.properties配置文件中的對應的配置項;

2)第三方組件類的配置參數綁定:需要在springboot啟動類內部把該參數配置類注冊為一個Bean,同時注解@ConfigurationProperties就可以實現第三方組件配置參數加載;

3)配置參數綁定啟動參數:無論是上邊1)還是2)參數配置除了可以在application.properties中配置外,還可以綁定啟動參數。

1)自定義配置參數綁定:

a)創建自定義配置參數類:

在app下新建包config,在app.config包下創建一個MySQLConfig.java:

package app.config;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "db")
@Component
@Getter
@Setter
@ToString
public class MySQLConfig {
    private String username;
    private String password;
    private String url;
    private String driverClassName;
}

備注:上邊注解@Getter@Setter@ToString的依賴包是lombok,需要在pom.xml添加配置:

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

c)在src/resources/application.properties中添加配置:

db.username="root"
db.password="123456"
db.url="jdbc:mysql:///mytestdb"
db.driverClassName="com.mysql.jdbc.Driver"

備注:這里邊的不區分大小寫:db.driverClassName

可以寫成:db.driverclassname=xx

可以寫成:db.driver_class_name=xx

也可以寫成db_driver-class_Name=xx

d)將app.config包注解為啟動入口監控的組件包:

package app;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;

import java.util.Arrays;

@ComponentScans({@ComponentScan("com.dx.controller"), @ComponentScan("app.config")})
@EnableAutoConfiguration
public class App {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        // 啟動方式一:
        SpringApplication.run(App.class, args);

        // 啟動方式二:
//        SpringApplication springApplication = new SpringApplication(App.class);
//        springApplication.setBannerMode(Banner.Mode.OFF);
//        springApplication.run(args);

        // 啟動方式三:
//        new SpringApplicationBuilder(App.class)
//                .bannerMode(Banner.Mode.OFF)
//                .build()
//                .run(args);
    }
}

e)新建測試接口類DataSourceTestController.java:

package com.dx.controller;

import app.config.MySQLConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class DataSourceTestController {
    @Autowired
    private MySQLConfig mySQLConfig;

    @RequestMapping("/dataSource")
    @ResponseBody
    public String dataSource() {
        System.out.println(mySQLConfig);
        return "dataSource";
    }
}

f)運行app.App.java,在瀏覽器中訪問http://localhost:8888/dataSource回車,查看打印信息:

MySQLConfig(username="root", password="123456", url="jdbc:mysql:///mytestdb", driverClassName="com.mysql.jdbc.Driver")

2)第三方組件類的配置參數綁定:

a)假設上邊自定義參數配置類app.config.MySQLConfig.java為一個第三方參數配置類:

package app.config;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter@Setter@ToString
public class MySQLConfig {
    private String username;
    private String password;
    private String url;
    private String driverClassName;
}

b)在入口類中注冊三方組件中參數配置類:

package app;

import app.config.MySQLConfig;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;

import java.util.Arrays;

@ComponentScans({@ComponentScan("com.dx.controller")})
@EnableAutoConfiguration
public class App {
    @Bean
    @ConfigurationProperties(prefix = "db")
    public MySQLConfig mySQLConfig() {
        return new MySQLConfig();
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        // 啟動方式一:
        SpringApplication.run(App.class, args);

        // 啟動方式二:
//        SpringApplication springApplication = new SpringApplication(App.class);
//        springApplication.setBannerMode(Banner.Mode.OFF);
//        springApplication.run(args);

        // 啟動方式三:
//        new SpringApplicationBuilder(App.class)
//                .bannerMode(Banner.Mode.OFF)
//                .build()
//                .run(args);
    }
}

c)測試:運行app.config.App.java,在瀏覽器中訪問http://localhost:8888/dataSource,回車。查看打印信息:

MySQLConfig(username="root", password="123456", url="jdbc:mysql:///mytestdb", driverClassName="com.mysql.jdbc.Driver")

3)配置參數綁定啟動參數:

打包項目為jar包,進入jar包生成目錄執行:

java -jar jar包名稱 --db.username=root --db.password=12345678 --db.url=jdbc:mysql:///mydb --db.driver=com.mysql.jdbc.Driver

執行后,訪問地址http://localhost:8888/dataSource回車。此時,查看打印信息如下:

E:\Work\springboot\springboothelloword\target>java -jar springboot-helloword-1.0-SNAPSHOT.jar --db.username=root --db.password=12345678 --db.url=jdbc:mysql:///mydb --db.driver=com.mysql.jdbc.Driver
[--db.username=root, --db.password=12345678, --db.url=jdbc:mysql:///mydb, --db.driver=com.mysql.jdbc.Driver]

                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         佛祖保佑       永無BUG
2018-04-07 22:38:39.210  INFO 10288 --- [           main] app.App                   : Started App in 4.387 seconds (JVM running for 5.763)
2018-04-07 22:38:46.759  INFO 10288 --- [nio-8888-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-04-07 22:38:46.761  INFO 10288 --- [nio-8888-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-04-07 22:38:46.805  INFO 10288 --- [nio-8888-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 44 ms
MySQLConfig(username=root, password=12345678, url=jdbc:mysql:///mydb, driverClassName="com.mysql.jdbc.Driver")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM