ホームページ  >  記事  >  Java  >  Java Spring Boot 1.5.4 は複数のデータソースを構成します

Java Spring Boot 1.5.4 は複数のデータソースを構成します

怪我咯
怪我咯オリジナル
2017-06-26 11:42:241816ブラウズ

Spring Boot はすでにマルチデータソース構成をサポートしています。特に面倒なインターネット上での多くのことを記述する必要はありません。次の解決策を参照してください。これらは公式のものですので、ご安心ください。

1. まずデータソース構成を定義します

#=====================multiple database config============================
#ds1
first.datasource.url=jdbc:mysql://localhost/test?characterEncoding=utf8&useSSL=true
first.datasource.username=root
first.datasource.password=123456
first.datasource.driver-class-name=com.mysql.jdbc.Driver
first.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
first.datasource.max-wait=10000
first.datasource.max-active=200
first.datasource.test-on-borrow=true
first.datasource.initial-size=10

#ds2
second.datasource.url=jdbc:mysql://localhost/test2?characterEncoding=utf8&useSSL=true
second.datasource.username=root
second.datasource.password=123456
second.datasource.driver-class-name=com.mysql.jdbc.Driver
second.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
second.datasource.max-wait=10000
second.datasource.max-active=200
second.datasource.test-on-borrow=true
second.datasource.initial-size=10
#=====================jpa config================================
#实体类维护数据库表结构的具体行为:update/create/create-drop/validate/none
spring.jpa.hibernate.ddl-auto=none
#打印sql语句
spring.jpa.show-sql=true
#格式化输出的json字符串
spring.jackson.serialization.indent_output=true


2.配置ds1的相关注入对象和启用jpa支持
/**
 * Created by hdwang on 2017-06-16.
 * 第一个数据源配置
 * If you are using Spring Data, you need to configure @EnableJpaRepositories */@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.hdwang.dao.datajpa.firstDs",entityManagerFactoryRef = "firstEntityManagerFactory",transactionManagerRef="firstTransactionManager")public class FirstDsConfig {/** * 数据源配置对象
     * Primary 表示默认的对象,Autowire可注入,不是默认的得明确名称注入
     * @return */@Bean
    @Primary
    @ConfigurationProperties("first.datasource")public DataSourceProperties firstDataSourceProperties() {return new DataSourceProperties();
    }/** * 数据源对象
     * @return */@Bean
    @Primary
    @ConfigurationProperties("first.datasource")public DataSource firstDataSource() {return firstDataSourceProperties().initializeDataSourceBuilder().build();
    }/** * 实体管理对象
     * @param builder 由spring注入这个对象,首先根据type注入(多个就取声明@Primary的对象),否则根据name注入
     * @return */@Bean
    @Primarypublic LocalContainerEntityManagerFactoryBean firstEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {return builder
                .dataSource(firstDataSource())
                .packages("com.hdwang.entity.dbFirst")
                .persistenceUnit("firstDs")
                .build();
    }/** * 事务管理对象
     * @return */@Bean(name = "firstTransactionManager")
    @Primarypublic PlatformTransactionManager transactionManager(EntityManagerFactory emf){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);return transactionManager;
    }

    @Bean
    @Primarypublic JdbcTemplate jdbcTemplate(){return new JdbcTemplate(firstDataSource());
    }

    @Bean
    @Primarypublic TransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager){return new TransactionTemplate(platformTransactionManager);
    }
}

相关知识点:
1.使用@Bean可以创建一个bean对象交给spring容器管理
2.@Bean创建的bean对象的名称默认为方法名,也可以指定
3.@Bean方法参数表示,接收一个bean对象,默认按照type类型接收注入的对象,若要修改为byName方式,可以使用@Qualifier注解注入准确的对象
4.@Primary表示该bean为此类型的默认bean,在其他地方引用的时候用@Autowired即可按照类型注入,不受同类型多个对象影响
5.EnableJpaRepositories表示启用spring data jpa的支持,也就是jpa的新使用方式,注意basePackages指的事 @Repository接口的所在包位置,可配置多个
其他注解就不清楚了!
2.配置ds2的相关注入对象和启用jpa支持
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.hdwang.dao.datajpa.secondDs", entityManagerFactoryRef = "secondEntityManagerFactory",transactionManagerRef = "secondTransactionManager")public class SecondDsConfig {

    @Bean
    @ConfigurationProperties("second.datasource")public DataSourceProperties secondDataSourceProperties() {return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("second.datasource")public DataSource secondDataSource() {return secondDataSourceProperties().initializeDataSourceBuilder().build();
    }/** * 实体管理对象
     * @param builder  由spring注入这个对象,首先根据type注入(多个就取声明@Primary的对象),否则根据name注入
     * @return */@Beanpublic LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {return builder
                .dataSource(secondDataSource())
                .packages("com.hdwang.entity.dbSecond")
                .persistenceUnit("secondDs")
                .build();
    }/** * 事物管理对象
     * @param secondEntityManagerFactory 实体管理工厂对象(按照名称注入)
     * @return 平台事物管理器     */@Bean(name = "secondTransactionManager")public PlatformTransactionManager transactionManager(@Qualifier("secondEntityManagerFactory")LocalContainerEntityManagerFactoryBean secondEntityManagerFactory){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(secondEntityManagerFactory.getObject());return transactionManager;
    }

    @Bean(name="jdbcTemplate2")public JdbcTemplate jdbcTemplate(){return new JdbcTemplate(secondDataSource());
    }

    @Bean(name = "transactionTemplate2")public TransactionTemplate transactionTemplate(@Qualifier("secondTransactionManager")PlatformTransactionManager transactionManager){return new TransactionTemplate(transactionManager);
    }
}

3. リポジトリデータ永続化レイヤー

package com.hdwang.dao.datajpa.firstDs;

@Repositorypublic interface UserRepository extends JpaRepository<User, Integer> {/** * spring data jpa 会自动注入实现(根据方法命名规范)
     * @return */User findByNumber(String number);


    @Modifying
    @Query("delete from User u where u.id = :id")void deleteUser(@Param("id")int id);
}
rreee

rreee
rreee
rreee

れーるーるーるーるーるーるーるーるーるーるー

以上がJava Spring Boot 1.5.4 は複数のデータソースを構成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:イオストリーム次の記事:イオストリーム