当前位置:   article > 正文

JAVA数据库操作二(多个数据库操作+Spring data + jpa)_java实现同时修改两个数据库

java实现同时修改两个数据库

缺的文件请参考上一篇文章http://blog.csdn.net/makefriend7/article/details/53941458

本文我们将主要实现同时操作两个数据库,(oracle 和mysql)

当然为了展示技巧,本文将以java配置为主

首先是daoContext.xml的内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  5. xmlns:c="http://www.springframework.org/schema/c"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xmlns:p="http://www.springframework.org/schema/p"
  8. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  9. xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
  10. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
  12. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
  13. <bean class = "db.MyConfig"/>
  14. <bean class = "mysqldb.MySqlConfig"/>
  15. </beans>

好吧。其实有用的就两行。

oralce的配置文件就MyConfig 内容如下

  1. package db;
  2. import com.mysql.cj.jdbc.MysqlDataSource;
  3. import oracle.jdbc.pool.OracleDataSource;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  7. import org.springframework.orm.jpa.JpaTransactionManager;
  8. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  9. import org.springframework.orm.jpa.vendor.Database;
  10. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import javax.persistence.EntityManager;
  13. import javax.sql.DataSource;
  14. import java.sql.SQLException;
  15. @Configuration
  16. @EnableJpaRepositories(basePackages = "db",
  17. entityManagerFactoryRef="entityManagerFactoryOracle",
  18. transactionManagerRef="transactionManagerOracle"
  19. )
  20. public class MyConfig {
  21. @Bean
  22. public DataSource dataSourceOracle() throws SQLException {
  23. OracleDataSource dataSource = new OracleDataSource();
  24. dataSource.setUser("abc");
  25. dataSource.setPassword("abc");
  26. dataSource.setURL("jdbc:oracle:thin:@192.168.1.2:1521:orcl");
  27. dataSource.setImplicitCachingEnabled(true);
  28. dataSource.setFastConnectionFailoverEnabled(true);
  29. return dataSource;
  30. }
  31. @Bean
  32. public HibernateJpaVendorAdapter jpaVendorAdapterOracle() {
  33. HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
  34. adapter.setDatabase(Database.ORACLE);
  35. adapter.setShowSql(true);
  36. adapter.setGenerateDdl(false);
  37. return adapter;
  38. }
  39. @Bean(name = "entityManagerFactoryOracle")
  40. public LocalContainerEntityManagerFactoryBean entityManagerFactoryOracle() throws SQLException{
  41. LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
  42. emf.setDataSource(dataSourceOracle());
  43. emf.setPersistenceUnitName("myPersistence1");
  44. emf.setJpaVendorAdapter(jpaVendorAdapterOracle());
  45. emf.setPackagesToScan("entity");
  46. return emf;
  47. }
  48. @Bean(name="transactionManagerOracle")
  49. public JpaTransactionManager transactionManagerOracle() throws SQLException{
  50. JpaTransactionManager txManager = new JpaTransactionManager(entityManagerFactoryOracle().getObject());
  51. return txManager;
  52. }
  53. }
mysql的配置文件如下

  1. package mysqldb;
  2. import com.mysql.cj.jdbc.MysqlDataSource;
  3. import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  7. import org.springframework.orm.jpa.JpaTransactionManager;
  8. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  9. import org.springframework.orm.jpa.vendor.Database;
  10. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import javax.sql.DataSource;
  13. import java.sql.Connection;
  14. import java.sql.SQLException;
  15. @Configuration
  16. @EnableJpaRepositories(basePackages = "mysqldb",
  17. entityManagerFactoryRef="entityManagerFactoryMySql",
  18. transactionManagerRef="transactionManagerMySql"
  19. )
  20. public class MySqlConfig {
  21. @Bean
  22. public DataSource dataSourceMySql() throws SQLException {
  23. MysqlDataSource dataSource = new MysqlDataSource();
  24. dataSource.setUser("abc");
  25. dataSource.setPassword("abc");
  26. dataSource.setURL("jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC");
  27. return dataSource;
  28. }
  29. @Bean
  30. public HibernateJpaVendorAdapter jpaVendorAdapterMySql() {
  31. HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
  32. adapter.setDatabase(Database.MYSQL);
  33. adapter.setShowSql(true);
  34. adapter.setGenerateDdl(true);
  35. return adapter;
  36. }
  37. @Bean(name = "entityManagerFactoryMySql")
  38. public LocalContainerEntityManagerFactoryBean entityManagerFactoryMySql() throws SQLException{
  39. LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
  40. emf.setDataSource(dataSourceMySql());
  41. emf.setPersistenceUnitName("myPersistence2");
  42. emf.setJpaVendorAdapter(jpaVendorAdapterMySql());
  43. emf.setPackagesToScan("mysqlentity");
  44. return emf;
  45. }
  46. @Bean(name="transactionManagerMySql")
  47. public JpaTransactionManager transactionManagerMySql() throws SQLException{
  48. return new JpaTransactionManager(entityManagerFactoryMySql().getObject());
  49. }
  50. }

这两个配置文件一出,大部分的工作就完成啦。

作为测试。我们分别定义表MyEntity在 oracle中,表MySqlEntity在mysql中

  1. package entity;
  2. import javax.persistence.*;
  3. import java.math.BigDecimal;
  4. @Entity
  5. public class MyEntity {
  6. @Id
  7. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prooduct_id_seq")
  8. @SequenceGenerator(name="prooduct_id_seq", sequenceName = "PRODUCT_ID_SEQ", allocationSize = 100)
  9. private Integer id;
  10. @Version
  11. private Integer version;
  12. private String testString;
  13. private BigDecimal testNumber;
  14. public Integer getId() {
  15. return id;
  16. }
  17. public void setId(Integer id) {
  18. this.id = id;
  19. }
  20. public Integer getVersion() {
  21. return version;
  22. }
  23. public void setVersion(Integer version) {
  24. this.version = version;
  25. }
  26. public String getTestString() {
  27. return testString;
  28. }
  29. public void setTestString(String testString) {
  30. this.testString = testString;
  31. }
  32. public BigDecimal getTestNumber() {
  33. return testNumber;
  34. }
  35. public void setTestNumber(BigDecimal testNumber) {
  36. this.testNumber = testNumber;
  37. }
  38. }

MySqlEntity的内容如下

  1. package mysqlentity;
  2. import javax.persistence.*;
  3. import java.math.BigDecimal;
  4. @Entity
  5. public class MySqlEntity {
  6. @Id
  7. @Column(name = "id", nullable = false, length = 64)
  8. private Integer id;
  9. @Version
  10. private Integer version;
  11. private String testString;
  12. private BigDecimal testNumber;
  13. public Integer getId() {
  14. return id;
  15. }
  16. public void setId(Integer id) {
  17. this.id = id;
  18. }
  19. public Integer getVersion() {
  20. return version;
  21. }
  22. public void setVersion(Integer version) {
  23. this.version = version;
  24. }
  25. public String getTestString() {
  26. return testString;
  27. }
  28. public void setTestString(String testString) {
  29. this.testString = testString;
  30. }
  31. public BigDecimal getTestNumber() {
  32. return testNumber;
  33. }
  34. public void setTestNumber(BigDecimal testNumber) {
  35. this.testNumber = testNumber;
  36. }
  37. }

测试嘛。就随便弄俩个数据库操作

oracle 的

  1. package db;
  2. import entity.MyEntity;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import java.math.BigDecimal;
  5. import java.util.List;
  6. public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
  7. List<MyEntity> findByVersion(Integer version);
  8. }

mysql的

  1. package mysqldb;
  2. import entity.MyEntity;
  3. import mysqlentity.MySqlEntity;
  4. import org.springframework.data.jpa.repository.JpaRepository;
  5. import java.util.List;
  6. public interface MySqlEntityRepository extends JpaRepository<MySqlEntity, Long> {
  7. List<MySqlEntity> findByVersion(Integer version);
  8. }

最后就是测试用的MyService

  1. package service;
  2. import db.MyEntityRepository;
  3. import entity.MyEntity;
  4. import mysqldb.MySqlEntityRepository;
  5. import mysqlentity.MySqlEntity;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import java.util.List;
  8. public class MyService {
  9. @Autowired
  10. public MyEntityRepository myEntityRepository;
  11. @Autowired
  12. public MySqlEntityRepository mySqlEntityRepository;
  13. public String processCommand(String anything)
  14. {
  15. String str = "hello";
  16. List<MyEntity> myEntityList = myEntityRepository.findAll();
  17. List<MyEntity> myEntityList2 = myEntityRepository.findByVersion(3);
  18. List<MySqlEntity> myEntityList3 = mySqlEntityRepository.findAll();
  19. return str;
  20. }
  21. }
怎么样?代码都跑起来了吧。。很容易就实现了JAVA同时操作两个数据库,下一篇将介绍如何操作ES

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52331
推荐阅读
相关标签
  

闽ICP备14008679号