• Spring注解(环境)


    以数据库为例:

     引入 c3p0数据源maven坐标

     数据库驱动

    @Configuration
    @PropertySource("classpath:/db.config.properties")
    public class ProfileConfig implements EmbeddedValueResolverAware {
       //方法一
        @Value("${db.user}")
        private String user;
      
        //方法三 通过值解析器  
        private StringValueResolver valueResolver;
        
        private String driverClass;
        
        @Profile("test")
        @Bean(name="testDataSource")                                            //方法二
        public ComboPooledDataSource dataSourceTest(@Value("${db.password}") String pwd) throws Exception{
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser("root");
            dataSource.setPassword(pwd);
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }

    @Profile("dev")
    @Bean(name="devDataSource") public ComboPooledDataSource dataSourceDev() throws Exception{ ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser(user); dataSource.setPassword("root"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev"); dataSource.setDriverClass(driverClass); return dataSource; } //重写方法 public void setEmbeddedValueResolver(StringValueResolver resolver) { this.valueResolver = resolver; driverClass = valueResolver.resolveStringValue("${db.driverClass}"); } }

    这样就可以将数据源注册到容器中了

    如何激活呢? 通过@Profile !

      指定组件在哪个环境的情况下 才能被注册到容器中,不指定任何环境下都能注册。

      只有当激活的bean 才能被注册进来

     加了环境表示@Profile 的bean  只有当环境被激活的 才可以注册到容器  默认是default

    激活方式:

    使用参数方式激活

    使用idea的界面激活

    通过代码的方式激活:

    public class test {
        @Test 
        public void test01(){  
            //使用无参构造器  创建applicationContext  (详情自己研究下有参构造器的方法)
            AnnotationConfigApplicationContext applicationContext  =new AnnotationConfigApplicationContext();
           //设置需要激活的环境
            applicationContext.getEnvironment().setActiveProfiles("dev","test"); //可以设置多个
           //注册主配置类
            applicationContext.register(Profile.class);    
           //启动刷新容器
           applicationContext.refresh();
          }  
    } 

    @Profile 还可以标注在类上: 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能生效

    没有标注@Profile的ben, 在任何环境下都是加载的

    IOC小结:

      

     

  • 相关阅读:
    为什么测试人员需要了解代码逻辑、表结构
    http报文常见的请求头、响应头
    测试人如何做出一份好简历
    如何制定测试计划
    写SQL的套路
    我是如何理解对公信贷业务
    db2----实操篇
    Oracle----高级操作
    常见web中间件漏洞(二)Apache漏洞
    常见web中间件漏洞(一)IIS漏洞
  • 原文地址:https://www.cnblogs.com/toov5/p/10665745.html
Copyright © 2020-2023  润新知