当前位置: 首页 > news >正文

服务好的武汉网站建设手机如何建网站

服务好的武汉网站建设,手机如何建网站,网站搭建费用,腾讯做网站上传一、主流的多数据源支持方式 将数据源对象作为参数,传递到调用方法内部,这种方式增加额外的编码。将Repository操作接口分包存放,Spring扫描不同的包,自动注入不同的数据源。这种方式实现简单,也是一种“约定大于配置…

一、主流的多数据源支持方式

  1. 将数据源对象作为参数,传递到调用方法内部,这种方式增加额外的编码。
  2. 将Repository操作接口分包存放,Spring扫描不同的包,自动注入不同的数据源。这种方式实现简单,也是一种“约定大于配置”思想的典型应用。本文将以这种方式实现JPA的多数据源支持
  3. 使用Spring AOP面向切面编程,然后在持久层接口方法上面加注解,不同的注解使用表示使用不同的数据源。在此暂不做介绍。

二、修改application.yml配置多数据源

spring:datasource:primary:jdbc-url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driversecondary:jdbc-url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverjpa:hibernate:ddl-auto: updatedatabase: mysqlshow-sql: true

三、 两组数据持久化接口及实体类,放到不同的package里面

  1. 将4.6章节中使用到的Article.java及ArticleRepository.java放到club.krislin.bootlaunch.jpa.testdb下面
  2. 然后写另外一套操作接口放到club.krislin.bootlaunch.jpa.testdb2下面,如下:
@Data
@Entity
public class Message {@Id@GeneratedValueprivate Long id;@Column(nullable = false)private String name;@Column(nullable = false)private String content;}
public interface MessageRepository extends JpaRepository<Message,Long> {}

四、多数据源支持

数据源DataSource的Bean对象创建并注入Spring上下文,分别对应application.yml里面的两套数据源配置

@Configuration
public class JPADataSourceConfig {@Primary@Bean(name = "primaryDataSource")@Qualifier("primaryDataSource")@ConfigurationProperties(prefix="spring.datasource.primary")    //结合application.yml的配置public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondaryDataSource")@Qualifier("secondaryDataSource")@ConfigurationProperties(prefix="spring.datasource.secondary")   //结合application.yml的配置public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

配置实体扫描以及事务管理,注意看@Primary和带注释的地方

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",transactionManagerRef="transactionManagerPrimary",basePackages= { "club.krislin.bootlaunch.jpa.testdb" }) //设置Repository所在位置
public class JPAPrimaryConfig {@Resource@Qualifier("primaryDataSource")private DataSource primaryDataSource;        //primary数据源注入@Primary@Bean(name = "entityManagerPrimary")        //primary实体管理器public EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactoryPrimary(builder).getObject().createEntityManager();}@Primary@Bean(name = "entityManagerFactoryPrimary")    //primary实体工厂public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {return builder.dataSource(primaryDataSource).properties(getVendorProperties()).packages("club.krislin.bootlaunch.jpa.testdb")     //设置实体类所在位置.persistenceUnit("primaryPersistenceUnit").build();}@Resourceprivate JpaProperties jpaProperties;private Map getVendorProperties() {return jpaProperties.getHibernateProperties(new HibernateSettings());}@Primary@Bean(name = "transactionManagerPrimary")         //primary事务管理器public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());}
}

上面的代码将扫描club.krislin.bootlaunch.jpa.testdb下面的实体对象和Repository,并使用primary数据源。仿造这段代码再写一套club.krislin.bootlaunch.jpa.testdb2的配置使用secondary数据源。代码如下:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",transactionManagerRef="transactionManagerSecondary",basePackages= { "club.krislin.bootlaunch.jpa.testdb2" }) //设置Repository所在位置
public class JPASecondaryConfig {@Resource@Qualifier("secondaryDataSource")private DataSource secondaryDataSource;@Bean(name = "entityManagerSecondary")public EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactorySecondary(builder).getObject().createEntityManager();}@Bean(name = "entityManagerFactorySecondary")public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {return builder.dataSource(secondaryDataSource).properties(getVendorProperties()).packages("club.krislin.bootlaunch.jpa.testdb2") //设置实体类所在位置.persistenceUnit("secondaryPersistenceUnit").build();}@Resourceprivate JpaProperties jpaProperties;private Map getVendorProperties() {return jpaProperties.getHibernateProperties(new HibernateSettings());}@Bean(name = "transactionManagerSecondary")PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());}}

五、测试

//先构造一个Article对象article,这个操作针对testdb
articleRepository.save(article);
//在构造一个Message对象message,这个操作针对testdb2
messageRepository.save(message);

如果article数据能正确插入testdbarticle表,message数据能正确的插入testdb2的message表,则JPA的多数据源实现正确。

http://www.tj-hxxt.cn/news/35053.html

相关文章:

  • 网站建设好不好学鸡西网站seo
  • 图书馆网站建设的要求优化新十条
  • 泸州高端网站建设公司windows优化大师可以卸载吗
  • 上海网站制作福州站长之家网站
  • 微信后台网站开发知识体系杭州网站关键词排名
  • 做网站能赚钱吗100个免费推广b站
  • 昆明专业网站建设模板网站seo分析报告
  • win2008r2做网站服务器自己可以做网站推广吗
  • 彩票游戏网站开发二手交易平台
  • 3d建模软件下载seo公司彼亿营销
  • 新网站怎么做流畅汕头网站建设方案推广
  • 大连 网站开发搜索引擎排名优化seo课后题
  • ASP.NET与网站开发实践教程seo推广灰色词
  • 制作外贸网站成本智慧教育
  • 揭阳网站如何制作网上店铺的推广方法有哪些
  • 网站广告js代码添加什么是seo关键词优化
  • 鹿泉区住房建设局网站百度关键词工具入口
  • seo推广和百度推广的区别成都seo培训班
  • 东莞专业网站制作设计搜索历史记录
  • 百度收录排名好的网站fba欧美专线
  • 广州牌具做网站的公司百度手机助手安卓版下载
  • 个人网站做百度推广怎么制作一个网页
  • 中文域名网站 被搜索微信公众号seo
  • wordpress备份插件济南网站万词优化
  • 网站服务器租用恒创网站建设方案推广
  • 深圳怎么注册公司网站百度浏览器下载
  • 河南安阳疫情最新消息今天封城了广告优化
  • 各行各业网站建设售后完善谷歌搜索引擎seo
  • 做ui要上那些网站seo优化或网站编辑
  • 网站开发 资质yandex搜索入口