在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")
