1. 程式人生 > >#springboot--通過yml或資原始檔自定義載入資訊

#springboot--通過yml或資原始檔自定義載入資訊

有時候,我們需要自定義一些資訊來實現我們的資訊載入,下面通過兩個實際案例來講解一下如何自定義載入資訊:
案例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()方法來獲取值。