zoukankan      html  css  js  c++  java
  • spring 注解学习 四 profile注解

    四、@Profile的作用

    4.1、Profile注解的定义

    使用@profile注解的目的是为了多环境开发,比如开发环境使用dev, 生产环境使用prod,就可以使用@Profile注解实现不同的开发环境使用不同的数据源。

    @Target({ElementType.TYPE, ElementType.METHOD})//可以标注在方法上,也可以标注在类上
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Conditional(ProfileCondition.class)
    public @interface Profile {
    
    	/**
    	 * The set of profiles for which the annotated component should be registered.
    	 */
    	String[] value();
    
    }
    

    4.2、使用案例

    Profile既可以标注在方法上,也可以标注在类上。本例只演示标注在方法上

    @Configuration
    @PropertySource("classpath:/dataSource.properties")
    public class ProfileConfig implements EmbeddedValueResolverAware {
    
        @Value("${mysql.user}")
        private String user;
        @Value("${mysql.password}")
        private String password;
        private String url;
        private String driver;
    
        private  StringValueResolver stringValueResolver;
    
    
        @Profile("dev")
        @Bean("devDataSource")
        public DataSource dataSourceDev() throws PropertyVetoException {
            ComboPooledDataSource dataSource=new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setJdbcUrl(url);
            dataSource.setDriverClass(driver);
            return dataSource;
        }
    
    
        @Profile("test")
        @Bean("testDataSource")
        public DataSource dataSourceTest() throws PropertyVetoException {
            ComboPooledDataSource dataSource=new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setJdbcUrl(url);
            dataSource.setDriverClass(driver);
            return dataSource;
        }
    
        @Profile("prod")
        @Bean("proDataSource")
        public DataSource dataSourcePro() throws PropertyVetoException {
            ComboPooledDataSource dataSource=new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setJdbcUrl(url);
            dataSource.setDriverClass(driver);
            return dataSource;
        }
    
        //获取字符串的解析器
        @Override
        public void setEmbeddedValueResolver(StringValueResolver resolver) {
            this.stringValueResolver=resolver;
            driver=stringValueResolver.resolveStringValue("${mysql.driver}");
            url=stringValueResolver.resolveStringValue("${mysql.url}");
        }
    }
    

    4.3、激活方式

    1、通过jvm参数

    -Dspring.profiles.active=test
    

    2、通过spring中的Environment环境变量

    @Test
        public void fun02(){
            AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
            context.getEnvironment().setActiveProfiles("dev");
            context.register(ProfileConfig.class);
            context.refresh();
            String[] beanNamesForType = context.getBeanNamesForType(DataSource.class);
            for (String name:beanNamesForType){
                System.out.println(name);
            }
    
        }
    

    3、在springboot中还可以通过@ActiveProfiles注解来激活

    @ActiveProfiles("dev")
  • 相关阅读:
    java设计模式简介
    java设计模式--单例模式
    判断整形回文数
    常用正则表达式 捕获组(分组)
    [转]十分钟搞定Vue搭建
    ActiveX界面已显示,调用方法报undefined的处理办法
    [转]纯js导出json到excel(支持chrome)
    webapi 开启gzip压缩
    webapi下载文件
    iis添加共享目录为虚拟目录
  • 原文地址:https://www.cnblogs.com/cplinux/p/14546429.html
Copyright © 2011-2022 走看看