#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()方法来获取值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值