Spring注解开发——24、自动装配-@Profile环境搭建--读取property文件的三种方法

目录

24、自动装配-@Profile环境搭建

24.1 添加 数据源和jdbc驱动 pom 依赖

实例:


24、自动装配-@Profile环境搭建

  1. Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能。
  2. 实际应用:开发环境、测试环境、正式环境 数据源切换
  • 读取property文件的两种方法
  1. @Value 放到属性上
  2. @Value 放到方法参数上
  3. 通过aware方法,或去spring基础组件,然后获取参数

24.1 添加 数据源和jdbc驱动 pom 依赖

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>

实例:

db.username=root
db.password=root
db.driveClassName=com.mysql.jdbc.Driver
package com.suirui.springanno.autowiredDemo.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.suirui.springanno.autowiredDemo.entity.Red;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.util.StringValueResolver;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

@Configuration
@PropertySource(value = {"classpath:/db.properties","classpath:/person.properties"})
public class MainConfigAutoWired2 implements EmbeddedValueResolverAware {

    @Value("${db.username}")
    private String username;

    //通过EmbeddedValueResolverAware获取Spring值解析器,然后再去获取properties中的数据
    StringValueResolver stringValueResolver;

    //测试数据源
    @Bean("dataSourceTest")
    public DataSource dataSourceTest(@Value("${db.username}" )String pwd ) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(username);
        dataSource.setPassword(pwd);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");

        String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
        dataSource.setDriverClass(driver);
        return dataSource;
    }

    //开发数据源
    @Bean("dataSourceDev")
    public DataSource dataSourceDev(@Value("${db.username}" )String pwd ) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(username);
        dataSource.setPassword(pwd);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev");
        String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
        dataSource.setDriverClass(driver);
        return dataSource;
    }

    //生产环境
    @Bean("dataSourceProd")
    public DataSource dataSourceProd(@Value("${db.username}" )String pwd ) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(username);
        dataSource.setPassword(pwd);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/prod");
        String driver = stringValueResolver.resolveStringValue("${db.driveClassName}");
        dataSource.setDriverClass(driver);
        return dataSource;
    }


    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        this.stringValueResolver = stringValueResolver;

    }
}
package com.suirui.springanno.autowiredDemo;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.suirui.springanno.autowiredDemo.config.MainConfigAutoWired;
import com.suirui.springanno.autowiredDemo.config.MainConfigAutoWired2;
import com.suirui.springanno.autowiredDemo.entity.Red;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import javax.sql.DataSource;
import java.util.Map;

public class MainTestAutoWired2 {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfigAutoWired2.class);

        String[] beanNamesForType = ac.getBeanNamesForType(DataSource.class);
        for (String s : beanNamesForType) {
            System.out.println(s);
        }
        Map<String, DataSource> beansOfType = ac.getBeansOfType(DataSource.class);
        for (Map.Entry<String, DataSource> entry : beansOfType.entrySet()) {
            System.out.println(entry.getKey());
            ComboPooledDataSource ds = (ComboPooledDataSource) entry.getValue();
            String user = ds.getUser();
            String password = ds.getPassword();
            String driverClass = ds.getDriverClass();
            System.out.println("user: " + user + ",pwd: "+ password + ". driverClass: " + driverClass);
            System.out.println("");
        }


    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值