#springboot--通過yml或資原始檔自定義載入資訊
阿新 • • 發佈:2019-01-22
有時候,我們需要自定義一些資訊來實現我們的資訊載入,下面通過兩個實際案例來講解一下如何自定義載入資訊:
案例1–自定義資料來源資訊
第一步:在yml或者資源屬性檔案中定義資料來源資訊:
ms:
db:
driverClassName: oracle.jdbc.driver.OracleDriver
#url
url: jdbc:oracle:thin:@localhost:1521:orcl
#使用者名稱
username: test
#使用者密碼
password: a
maxActive: 500
第二步:編寫工具類
package com .yzh.maven.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import java.beans .PropertyVetoException;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Configuration
public class DBConfig {
@Autowired
private Environment env;
@Bean(name="dataSource")
public ComboPooledDataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(env.getProperty("ms.db.driverClassName"));
//通過Environment例項直接獲取yml檔案中的資訊ms.db.url
dataSource.setJdbcUrl(env.getProperty("ms.db.url"));
dataSource.setUser(env.getProperty("ms.db.username"));
dataSource.setPassword(env.getProperty("ms.db.password"));
dataSource.setMaxPoolSize(20);
dataSource.setMinPoolSize(5);
dataSource.setInitialPoolSize(10);
dataSource.setMaxIdleTime(300);
dataSource.setAcquireIncrement(5);
dataSource.setIdleConnectionTestPeriod(60);
return dataSource;
}
}
案例2–自定義埠資訊和自動建表、顯示SQL屬性資訊
有的時候,程式在編譯器環境中可以穩定執行,但是打成jar包後會出現埠不一致、無法自動建表和顯示SQL屬性資訊,那麼這時候,我們就需要自定義這些資訊,以保證程式在載入時保持開發環境和生產環境的統一:
第一步:在yml或者資源屬性檔案中定義資料來源資訊:
#配置埠
server_port: 8988
#自動建表採用update的方式
auto_create:
table: update
#是否顯示sql
my:
show_sql: true
第二步:
建立資訊環境處理工具類
package com.yzh.maven.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.stereotype.Repository;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Repository
public class ApplicationProperties extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {
@Value("${auto_create.table}")
private String isCreateTable;
@Value("${my.show_sql}")
private boolean isShowSql;
@Value("${server_port}")
private int server_port;
public String getIsCreateTable() {
return isCreateTable;
}
public void setIsCreateTable(String isCreateTable) {
this.isCreateTable = isCreateTable;
}
public boolean isShowSql() {
return isShowSql;
}
public void setShowSql(boolean showSql) {
isShowSql = showSql;
}
public ApplicationProperties() {
}
public int getServer_port() {
return server_port;
}
public void setServer_port(int server_port) {
this.server_port = server_port;
}
//設定埠(伺服器啟動時呼叫)
@Override
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
configurableEmbeddedServletContainer.setPort(this.server_port);
}
}
注意:因為這個類最終是要使用@Autowired註解來獲取例項的,因此我們需要在其上方新增@Repository註解;我們使用 @Value(“${xxx.yyy}”)的格式獲取yml或資原始檔中的資訊;由於埠需要在啟動伺服器時設定好,因此我們需要繼承SpringBootServletInitializer並實現 EmbeddedServletContainerCustomizer介面的customize()定製方法,通過ConfigurableEmbeddedServletContainer類的setPort()方法來設定埠。
第三步:
使用 @Autowired註解可以獲取ApplicationProperties的一個例項,然後通過getXXX()方法來獲取值。