当前位置:首页 > Java技术文章 > Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置实例详解

  • 发布时间:
  • 作者:码农之家原创
  • 点击:110

这篇文章主要知识点是关于servlet、mybatis、Spring、springcloud、多数据源配置、spring基于通用Dao的多数据源配置详解 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下java相关资源

Scala与Clojure函数式编程模式:Java虚拟机高效编程

本书向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式

查看详情

Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

一、项目需求

在开发过程中,由于技术的不断迭代,为了提高开发效率,需要对原有项目的架构做出相应的调整。

二、存在的问题

为了不影响项目进度,架构调整初期只是把项目做了简单的maven管理,引入springboot并未做spring cloud微服务处理。但随着项目的进一步开发,急需拆分现有业务,做微服务处理。因此架构上的短板日益突出。spring cloud config 无法完全应用,每次项目部署需要修改大量配置文件。严重影响开发效率,因此便萌生了对项目架构再次调整的决心。

三、调整建议

为了兼容以前的代码版本,尽量不修改现有的代码结构,以免增加额外的工作量并且为了更好的应用cloud config。

首先,创建JdbcConfigBean类,用以读取配置文件,实例代码入如下(仅供参考):

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@RefreshScope
@Component("jdbcConfigBean")
public class JdbcConfigBean {
  @Value("${jdbc.driver}")
  private String driver;
  @Value("${db1.jdbc.url}")
  private String url;
  @Value("${db1.jdbc.username}")
  private String username;
  @Value("${db1.jdbc.password}")
  private String password;
  @Value("${db2.jdbc.url}")
  private String db2_url;
  @Value("${db2.jdbc.username}")
  private String db2_username;
  @Value("${db2.jdbc.password}")
  private String db2_password;
  // 其他数据源
  // 其他配置
  // 相应的getter setter 方法
}

其次,创建数据源,代码示例如下(仅供参考):

/**
 * xml Mabatis XML配置文件
 * @param xml
 * @return
 **/
 public static SqlSessionFactory create(String xml){
 JdbcConfigBean jdbcConfigBean = (JdbcConfigBean) SpringContextUtil.getBean("jdbcConfigBean");
 Properties properties = new Properties();
 properties.setProperty("jdbc.driver", jdbcConfigBean.getDriver());
 properties.setProperty("db1.jdbc.url", jdbcConfigBean.getUrl());
 properties.setProperty("db1.jdbc.username", jdbcConfigBean.getUsername());
 properties.setProperty("db1.jdbc.password", jdbcConfigBean.getPassword());
 properties.setProperty("db2.virtual.jdbc.url", jdbcConfigBean.getDb2_url());
 properties.setProperty("db2.virtual.jdbc.username", jdbcConfigBean.getDb2_username());
 properties.setProperty("db2.virtual.jdbc.password", jdbcConfigBean.getDb2_password());
 // 其他属性
 try {
  Reader reader = Resources.getResourceAsReader(xml);
  SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  return sqlSessionFactoryBuilder.build(reader, properties);
 } catch (IOException e) {
  log.error("创建数据源失败:" + e.getMessage());
 }
 return null;
 }

以上,便可以做多数据元的配置,并且在不改动现有代码结构的条件下很好的集成spring cloud config和Mybatis。

四、小结

写作目的不是为了解决具体的问题,因为每个人遇到的项目都不相同,问题也不会一样,应用场景也不尽相同。对于具体问题可能有失参考意义。但是我们也应该看到通用的部分,比如多数据源的配置,cloud config的应用等等。

最后需要说明的一点是不要拘泥于具体的实现,而是要体会其中的逻辑,理解技术应用的方式。具体实现并不重要,重要的是解决问题的过程以及其中的思想,为什么要这样做,为什么可以这样做,这样做的好处在哪里?真正理解技术,这些问题便不难回答。

小结难免有不当之处,欢迎诸位指正!希望可以通过不断的讨论小结精进技术。让我们同技术死磕到底!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。如果你想了解更多相关内容请查看下面相关链接

spring基于通用Dao的多数据源配置详解

有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种方式和资源文件冲突;扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其他名字,最终解决方法如下:

1.在项目中加入如下类MultipleDataSource.java

package com.etoak.util; 
 
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 
 
public class MultipleDataSource extends AbstractRoutingDataSource { 
   
  private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();  
  public static void setDataSourceKey(String dataSource) { 
    dataSourceKey.set(dataSource); 
  } 
  @Override 
  protected Object determineCurrentLookupKey() { 
    // TODO Auto-generated method stub 
    return dataSourceKey.get(); 
  } 
 
} 

spring配置文件如下:

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:context="http://www.springframework.org/schema/context" 
  xmlns:p="http://www.springframework.org/schema/p" 
  xmlns:mvc="http://www.springframework.org/schema/mvc" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
 
  <context:component-scan base-package="com"/> 
   
  <mvc:annotation-driven/> 
   
 
  <context:property-placeholder location="classpath:db.properties"/> 
  <bean id="ds1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
    p:driverClassName="${mysql.driver}" 
    p:url="${mysql.url}" 
    p:username="${mysql.username}" 
    p:password="${mysql.password}"/> 
  <bean id="ds2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
    p:driverClassName="${mysql2.driver}" 
    p:url="${mysql2.url}" 
    p:username="${mysql2.username}" 
    p:password="${mysql2.password}"/> 
   
   
  <bean id="multipleDataSource" class="com.etoak.util.MultipleDataSource"> 
    <property name="defaultTargetDataSource" ref="ds1"/> 
    <property name="targetDataSources"> 
      <map> 
        <entry key="ds1" value-ref="ds1"/> 
        <entry key="ds2" value-ref="ds2"/> 
      </map> 
    </property> 
  </bean> 
   
  <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean" 
    p:dataSource-ref="multipleDataSource" 
    p:mapperLocations="classpath:com/etoak/dao/*-mapper.xml"/> 
   
  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="com.etoak.dao"/> 
        <property name="markerInterface" value="com.etoak.dao.BaseDao" /> 
  </bean>   
   
</beans> 

测试类如下:

package com.etoak.test; 
 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 
 
import com.etoak.dao.ProductDaoIf; 
import com.etoak.util.MultipleDataSource; 
 
public class Test { 
 
  public static void main(String[] args) { 
    ApplicationContext ac = new  
      FileSystemXmlApplicationContext("WebContent/WEB-INF/etoak-servlet.xml"); 
     
    ProductDaoIf proDao = (ProductDaoIf)ac.getBean(ProductDaoIf.class); 
     
    MultipleDataSource.setDataSourceKey("ds1"); 
    int count1 = proDao.selectProductCount(); 
    MultipleDataSource.setDataSourceKey("ds2"); 
    int count2 = proDao.selectProductCount(); 
    System.out.println(count1); 
    System.out.println(count2); 
  } 
 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于Java的全部知识点内容总结,大家还可以在下方相关文章里找到Java数据结构性能优化实例、 Springboot跨域访问不使用、 spring-boot-starter-web更换默认、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:Springboot跨域访问不使用jsonp的简单方法

下一篇:SpringMvc+POI处理excel表数据导入的实操方法

展开 +

收起 -

Spring多数据源配置 相关内容
明解Java

这是一本更适合入门的Java编程书,图文并茂,示例丰富,通过284幅图表和258段代码,由浅入深地解说了从Java的基础知识到面向对象编程的内容

查看详情
HTML5+CSS3+JavaScript从入门到精通

本书以基础知识、示例、实战案例相结合的方式详尽讲述了HTML,CSS,JavaScript及目前最新的前端技术

查看详情
第一行代码[Java]视频讲解版

本书是国内原创经典Java入门书,以丰富的例子、通俗易懂的语言、简单的图示,详细地介绍了Java开发中重点用到的多种技术,包括Java简介、程序基本概念、面向对象基本概念、面向对象高级知识、Eclipse开发工具等

查看详情
深度解析Java游戏服务器开发

以便协助想掌握新手入门服务器开发设计的从业者或式从业者快速把握Java服务器开发设计的技术性,这书从手机游戏的行业现状、Java技术性、手机游戏逻辑性、数据库系统、网络理论、服务器

查看详情
Java高并发编程详解:多线程与架构设计

《Java高并发编程详解》立足于线程源码剖析,从基础入手,逐层渐进深入,环环紧扣,针对技术细节进行了细致归纳,在解读源码的时候又引入了优秀的架构设计。

查看详情
Java程序设计基础

《Java程序设计基础》是一本关于java的电子书资源,涉及Java、程序设计等相关内容,本文提供大小为158MB的扫描第5PDF格式电子书下载,希望大家能够喜欢。

查看详情
Java并发编程从入门到精通

《Java并发编程从入门到精通》 作者结合自已10多年Java并发编程经验,详细介绍了Java并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。 本书内

查看详情
Spring多数据源配置 学习笔记
网友NO.619178

springboot-mongodb的多数据源配置的方法步骤

在日常工作中,我们可能需要连接多个MongoDB数据源,比如用户库user,日志库log。本章我们来记录连接多个数据源的步骤,以两个数据源为例,多个数据源类推。 1、pom.xml中引入mongodb的依赖 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-mongodb/artifactId/dependencydependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId/dependencydependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-autoconfigure/artifactId versionRELEASE/version/dependency Lombok - 是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。简单试了以下这个工具还挺好玩的,加上注解我们就不用手动写 getter\setter、构建方式类似的代码了。 2, yml配置: mongodb: primary: host: 192.168.9.60 port: 20000 dat……

网友NO.542137

springboot v2.0.3版本多数据源配置方法

本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is required with driverClassName. 先来说下之前的多数据源配置如: spring: datasource: url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight username: sa password: 1234.abcd driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver seconddatasource: url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight2 username: sa password: 1234.abcd driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver 配置了两个数据库,在原来默认的datasource节点下面增加了seconddatasource节点的配置,然后主要的代码如: @Primary @Bean @ConfigurationProperties(prefix = "spring.seconddatasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secodDataSource") @ConfigurationProperties(prefix = "spring.seconddataso……

网友NO.984891

Spring Boot 2.0多数据源配置方法实例详解

两个数据库实例,一个负责读,一个负责写。 datasource-reader: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://192.168.43.61:3306/test?useUnicode=trueautoReconnect=truecharacterEncoding=utf8useSSL=false username: icbc password: icbc driver-class-name: com.mysql.jdbc.Driver continue-on-error: false sql-script-encoding: UTF-8 读数据库配置 @Configuration@EnableTransactionManagement@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryPrimary", transactionManagerRef = "transactionManagerPrimary", basePackages = { "cn.cib.repository.read"})public class RepositoryPrimaryConfig { @Autowired @Qualifier("r_ds") private DataSource r_ds; @Bean(destroyMethod = "", name = "entityManagerPrimary") @Primary public EntityManager entityManager() { return entityManagerFactoryPrimary().getObject().createEntityManager(); } @Bean(destroyMethod = "", name = "entityManagerFactoryPrimary") @Primary public LocalContainerEntityManagerFactoryBean entityManager……

网友NO.715851

spring+Jpa多数据源配置的方法示例

今天临下班时遇到了一个需求,我的管理平台需要从不同的数据库中获取数据信息,这就需要进行Spring的多数据源配置,对于这种配置,第一次永远都是痛苦的,不过经历了这次的折磨,今后肯定会对这种配置印象深刻。我们这里简单回顾一下流程。 我们配置了两个数据库,一个是公司的数据库,另一个是我本地的一个数据库。首先是application.yml的配置(其中对于公司的数据库我们采取了假的地址,而本机的数据库是真是存在对应的表和库的) 数据库信息: 数据表信息: 1、application.yml datasource: primary: url: jdbc:mysql://companyurl.com:5002/db1 username: unameq password: passwd1 driver-class-name: com.mysql.jdbc.Driver secondary: url: jdbc:mysql://localhost:3306/django_test username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver jpa: database-platform: org.hibernate.dialect.MySQL5Dialect hibernate: ddl-auto: upda……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757