资讯专栏INFORMATION COLUMN

@Profile 条件化 bean

Hwg / 2151人阅读

摘要:条件化使用的例子开发环境使用数据库,线上环境使用数据库数据库配置文件说明可以用来条件化,使用注解即可配置也行激活机制有时,激活标记的没有则激活标记的都没有,则只激活没有限定的激活方式有六种作为的初始化参数作为应用的上下文参数作为条目作为

@Profile 条件化 bean
使用 Profile 的例子:开发环境使用 H2 数据库,线上环境使用 MySql 数据库
application.properties
datasource.url=jdbc:mysql://localhost:3306/spring_test?useUnicode=true&characterEncoding=utf-8
datasource.driverClassName=com.mysql.jdbc.Driver
datasource.username=root
datasource.password=123456
datasource.initialSize=5
datasource.maxActive=10
datasource.maxWait=6000

spring.profiles.active=prod
spring.profiles.default=dev
数据库配置文件
@Configuration
@PropertySource("classpath:application.properties")
@EnableTransactionManagement
public class DataTestConfig {
    @Value("${datasource.driverClassName}")
    private String driverClassName;

    @Value("${datasource.url}")
    private String url;

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

    @Value("${datasource.password}")
    private String password;

    @Value("${datasource.initialSize}")
    private int initialSize;

    @Value("${datasource.maxActive}")
    private int maxActive;

    @Value("${datasource.maxWait}")
    private int maxWait;

    @Bean
    @Profile("prod")
    public DruidDataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driverClassName);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        ds.setInitialSize(initialSize);
        ds.setMaxActive(maxActive);
        ds.setMaxWait(maxWait);
        return ds;
    }

    @Bean
    @Profile("dev")
    public DataSource embeddedDataSource() {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .addScript("classpath:schema.sql")
                .addScript("classpath:test-data.sql")
                .build();
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory(DataSource dataSource){
        LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
        sfb.setDataSource(dataSource);
        sfb.setPackagesToScan(new String[] { "com.seal_de.domain" });
        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        props.setProperty("hibernate.show_sql", "true");
        sfb.setHibernateProperties(props);
        return sfb;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory);
        return transactionManager;
    }
}
profile 说明

profile 可以用来条件化 bean,使用 @Profile 注解即可(xml 配置也行)

profile 激活机制:有 spring.profiles.active 时,激活 active 标记的;没有则激活 spring.profiles.default 标记的;都没有,则只激活没有 profile 限定的

激活方式有六种:

作为 DispatcherServlet 的初始化参数;

作为 Web 应用的上下文参数;

作为 JNDI 条目;

作为环境变量;

作为 JVM 的系统属性;

在集成测试类上,使用 @ActiveProfiles 注解设置

该例子说明

当属性文件包含 spring.profiles.active=prod 和spring.profiles.default=dev 时,使用的是 MySql 的数据源

当属性文件只有 spring.profiles.default=dev 时,使用的是 H2 的数据源

@Condition 注解是更通用的条件化 bean 的注解

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67172.html

相关文章

  • Spring - 高级装配

    摘要:高级装配条件化的自动装配与歧义性的作用域表达式语言环境与可以为不同的环境提供不同的数据库配置加密算法等注解可以在类级别和方法级别,没有指定的始终都会被创建的方式配置不同环境所需要的数据库配置会搭建一个嵌入式的数据库模式定义在测试数据通过加 高级装配 Spring profile 条件化的bean 自动装配与歧义性 bean的作用域 Spring表达式语言 环境与profile p...

    binta 评论0 收藏0
  • spring入门指南

    摘要:装配提供了三种装配机制在中进行显示配置在中进行显示配置隐式的发现机制和自动装配机制。表示该类是一个组件,将自动创建该组件实例,表示注入组件实例,和功能类似,和功能类似,但和是规范中提供的注解。 基本原理 spring的基础是IOC和DI,其实IOC和DI是对同一件事从不同的方面进行描述的,两者在spring中是同一件事务。 IOC:控制反转,在这里就是指创建bean的主动权发生了转移,...

    shusen 评论0 收藏0
  • 看起来很长但还是有用的Spring学习笔记

    摘要:关于依赖注入注入的注解提供的注解不仅仅是对象,还有在构造器上,还能用在属性的方法上。与之相反,的限定符能够在所有可选的上进行缩小范围的操作,最终能够达到只有一个满足所规定的限制条件。注解是使用限定符的主要方式。 本文首发于泊浮目的专栏:https://segmentfault.com/blog... Spring致力于提供一种方法管理你的业务对象。在大量Java EE的应用中,随处可...

    DTeam 评论0 收藏0
  • 第三章 高级装配

    摘要:注解只可以装配只有一个实现类的例如下面的有三个实现类,自动装配时,就会不知道选哪一个,因而会报错误。使用表达式语言进行装配使用的来引用待补充实例调用方法和访问对象的属性对峙进行算数,关系和逻辑运算正则表达式匹配集合操作 完整代码请见:https://github.com/codercuixi... 第一部分 @Profile注解的使用 环境与profile 是否启用某个bean,常用于...

    only_do 评论0 收藏0
  • Spring注解专题系列

    摘要:用法先创建个组件,,,分别在类上加上注解。发现有一个属性源码注释这样说的自动检测使用组件。在的方法中,表示不匹配,代表匹配。这就说明使用注册组件有种方式。 Spring注解应用篇--IOC容器Bean组件注册 这是Spring注解专题系类文章,本系类文章适合Spring入门者或者原理入门者,小编会在本系类文章下进行企业级应用实战讲解以及spring源码跟进。 环境准备 编译器IDEA...

    CocoaChina 评论0 收藏0

发表评论

0条评论

Hwg

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<