记录分享公司Spring data相关配置
起因
公司Spring Data相关的配置还是有点意思的,不过蛮复杂的...XML很多...我不太喜欢强行记住....所以我打算记录一下配置的大致思路和结构,以后可能会有用....
总体结构

总体结构大致就是这样..Spring/data这个文件夹主要配置Spring Data相关的配置.
data下主要有2个文件夹:datasource和module,还有一些其他的XML和properties
XML和properties
data-context.xml
<import resource="data-source-context.xml"/>
<import resource="spring-data-context.xml"/>
这个文件比较简单,就是引入其他2个配置文件.
不只是Spring Data.其他和Spring集成的工具都会有这么1个配置文件,比如cache,basecode等,记录要引入的其他配置文件..大概算是一个配置清单吧...除了引入其他配置文件以外没有什么实际作用
data-source-context.xml
公司这个文件主要用途大概有2个:
1.加载datasource文件夹下的配置,从图中可以看出我们这里有3个数据源
2.配置jta全局事务,这些事务是跨数据源的.所以不会配置在datasource里.
data.properties
这个文件比较常见,配置的是开发环境的数据库地址,账号,密码等信息..仅仅只是开发环境,而测试环境和实际生产环境都是通过web容器通过jndi来提供数据源的
spring-data-context.xml
这个配置文件主要用途:
1.加载module下的配置,module代表了项目可以被分为多个模块,每个模块可能会用到不同的数据源,从图中可以看到我们项目分为4个模块
2.加载一些4个模块通用的repository(我们这里使用Spring Data JPA,所以要指明需要加载的repository)..
datasource目录
这个目录下的配置文件主要是配置数据源用的..
从图中可以看出我们主要用到3个数据源..

每个数据源的配置主要由2个文件组成
zg-jpa-context.xml
这个文件配置的是这个数据源对应的jpa entity manager
<bean id="zgEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="sbf-zg-db" />
<property name="dataSource" ref="zgDataSource"/>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="ORACLE" />
</bean>
</property>
<property name="packagesToScan">
<array>
</array>
</property>
<property name="mappingResources" value="sql/zs-named-query.xml"/>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.show_sql" value="${service.JPA.LOG.ENABLED}" />
<entry key="hibernate.format_sql" value="${service.JPA.LOG.ENABLED}" />
</map>
</property>
<property name="persistenceUnitPostProcessors">
<list>
<bean class="XXX.DynamicPersistenceUnitPostProcessor">
<property name="databaseName" value="zg"/>
</bean>
</list>
</property>
</bean>
配置entity manager主要需要配置packagesToScan.用途是加载entity,映射数据库里的表
我们这里之所以没有配置这个属性,是因为我们配置了自己写的PersistenceUnitPostProcessor,看名字就知道它是个后置处理器,可以增强原本的PersistenceUnit的功能..我们在这个自己写的类里去加载了module下面配置的entity...所以相当于把packagesToScan里要加载的entity移到这里去加载了....不过我暂时没有发现这有什么优点....
===============20170207补=============
加载entity的核心步骤
Reflections r1 = new Reflections(ClasspathHelper.forPackage(pack.trim()),
new SubTypesScanner(), new TypeAnnotationsScanner());
Set<Class<?>> entityClasses = r1.getTypesAnnotatedWith(Entity.class);
Set<Class<?>> mappedSuperClasses = r1
.getTypesAnnotatedWith(MappedSuperclass.class);
for (Class<?> clzz : mappedSuperClasses) {
if (clzz.getName().startsWith(pack.trim())) {
LOGGER.debug("Load entity {}", clzz.getName());
pui.addManagedClassName(clzz.getName());
}
}
data-source-context.xml
这个文件主要用途:
1.配置了前面jpa entity manager需要用到的数据源.
2.利用前面的entity manager配置了transactionManager
<bean id="zgTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="zgEntityManagerFactory" />
</bean> <beans profile="development,default">
<bean id="zgDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" scope="singleton">
<property name="driverClassName">
<value>${data.datasource.ZG.JDBC.DRIVER}</value>
</property>
<property name="url">
<value>${data.datasource.ZG.JDBC.URL}</value>
</property>
<property name="username">
<value>${data.datasource.ZG.JDBC.USERNAME}</value>
</property>
<property name="password">
<value>${data.datasource.ZG.JDBC.PASSWORD}</value>
</property>
</bean>
</beans> <beans profile="PROD">
<jee:jndi-lookup id="zgDataSource" jndi-name="jdbc/ZgDataSource" />
</beans>
从代码里可以看出开发环境和生产环境,测试环境使用的数据源配置是不同的..
开发用的数据源是data.properties里定义好的,而测试和生产环境的数据源通过jndi方法引用weblogic里配置的数据源.
好处大概就是开发中有源代码,修改data.properties切换开发,测试库比较方便吧...而生产环境不会修改代码,直接通过weblogic控制台修改数据源比较方便吧...
另外我觉得把transactionManager的配置放到zg-jpa-context.xml里面似乎更合理..因为数据源应该只要配置数据源就够了.和transactionManager貌似没什么关系..不过放这里倒也没什么问题..
Module文件夹

module是项目具体业务的分类...从图中可以看出我们这里主要分4个模块..dj,rd,sb和zs
每个模块下都有2个配置...比如图中sb目录下(这里其实有3个..Spring-data-context-XX.xml有2个.只是因为我们各地有差异化.2个文件的作用是一样的).
data-mapping.properties
hx.sb.mapping.package=XXX.sb.cmp,yyy.cmp
qz.sb.mapping.package=xxx.cmp
zg.sb.mapping.package=xxx.cmp
还记得我们前面自己写的PersistenceUnitPostProcessor吗..那个PostProcessor需要加载受管的entity来映射数据库..那这些entity的路径是什么呢? 那些路径就定义在这个properties里..
从properties里的key我们可以看出不同的数据源加载的entity是不同的,我们前面定义了3个数据源,sb这个模块3个数据源都要用到(其实只要用到2个,中间那个nx是差异化配置的),所以这里需要3对键值对来指明3个数据源分别需要加载哪些entity...而其他模块如果只要用到1个数据源,那这里就只需要写用到那个数据源需要加载的受管entity就可以了...
所以这里是分模块管理entity的..这是一个优点,在自测的时候可以分模块加载数据源,而不是一股脑全部加载...不过这只是理论上...实际上大家为了方便,不会写额外配置文件..最后还是加载最外层的配置文件...相当于所有数据源和entity都加载了...不管怎么说...这是一个有点意思的配置...
spring-data-context-standard.xml
standard是可以修改成其他的.比如图中的nx..
这些配置文件是差异化的.各地有不同的配置...
这个配置文件的用途是加载spring data jpa需要用到的repository.
<jpa:repositories base-package="gov.gt3.iitms.sbf"
entity-manager-factory-ref="hxEntityManagerFactory"
transaction-manager-ref="hxTransactionManager"
factory-class="org.springframework.data.jpa.repository.support.CustomRepositoryFactoryBean">
<repository:include-filter type="regex"
expression="gov\.gt3\.iitms\.sbf\.sb\.repository\.[^.]*Repository" />
<repository:include-filter type="regex"
expression="gov\.gt3\.iitms\.sbf\.sb\.batch\.standard\.plkk\.repository\.[^.]*Repository" />
</jpa:repositories> <jpa:repositories base-package="gov.gt3.iitms.sbf"
entity-manager-factory-ref="zgEntityManagerFactory"
transaction-manager-ref="zgTransactionManager"
factory-class="org.springframework.data.jpa.repository.support.CustomRepositoryFactoryBean">
<repository:include-filter type="regex"
expression="gov\.gt3\.iitms\.sbf\.sb\.repository\.cxtj\.[^.]*Repository" />
</jpa:repositories>
比如我这里要用到2个数据源..那除了这2个数据源对应的entity在配置jpa entity manager里配置外(前面提到过)..这里还需要配置需要加载的repository在哪里...
也就是说你可以1个entity.java对应2个数据源的2个repository....
反正这个模块要用到几个数据源,这里就加载这几个数据源要用到的repository...repository相当于是数据存储的路径方式,所以是跟着数据源走的...
总结
也没啥好总结的...上面就是公司的主要用法...自己简单玩玩的话似乎不需要这么复杂...不知道其他公司是怎么配置的...等我有新的发现的时候再补充说明吧...
记录分享公司Spring data相关配置的更多相关文章
- 记录一次Spring Data Solr相关的错误解决
记录一次Spring Data Solr相关的错误解决 生活本不易,流人遂自安 相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有 ...
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- Spring Data Jpa配置
Spring Data JPA提供的接口,也是Spring Data JPA的核心概念: 1:Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组 ...
- Spring Bean相关配置
Bean相关配置 1.名称与标识 id 使用了约束中的唯一约束.里面不能出现特殊字符的 name 没有使用约束中的唯一约束.里面可以出现特殊字符. 设置对象的生命周期方法 init-method Be ...
- 【jpa】spring data jpa 配置使用
1.spring data jpa 简单介绍 jpa是用于对象持久化的API,jpa是一种规范,而其他的ORM框架(hibernate,topLink等)是其实现,所以jpa可以使用不同的实现方式,修 ...
- Java Spring Bean相关配置
1.Bean配置信息组成部分: (1)Bean实现类 (2)Bean的属性信息 (3)Bean的依赖关系 (4)Bean的行为配置 2.配置方式: (1)XML配置 (2)注解配置 (3)Java类配 ...
- Spring学习笔记(二)——Spring相关配置&属性注入&Junit整合
一.Spring的相关配置 1.1 Bean元素 class属性:被管理对象的完整类名 name属性:给Bean起个名字,能重复,能使用特殊字符.后来属性 id属性:给Bean起个名字,不能重复,不能 ...
- Spring Data JPA的Audit功能,审计数据库的变更
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 数据库审计 数据库审计是指当数据库有记录变更时,可以记录数据库的变更时间和变更人等,这样以后出问题回溯问责也比较方便. ...
- MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
随机推荐
- 2015-12-01 SQL查询语句基础
1.查询全体学生的学号与姓名select sno,snamefrom student;3.查询全体学生的详细信息select *from student;4.查询全体学生的姓名及其出生年份select ...
- MySQL 数据库通过日志恢复
http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...
- Akka初步介绍
Akka可能很多人都没有用过,也不知道是什么,但如果说起Scala或Spark就有很多人都听说过或使用过 ,这里简单说下三者的关系Akka是使用Scala开发的,Spark中使用了Akka作为其消息的 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- android 获取IMSI信息(判断是移动,联通,电信手机卡)
首先我们需要知道手机IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信.那么第一步就是先获取手机IMSI号码:代码如下 /** *获取IMSI信息 * ...
- sqlserver 连接不同服务器,不同实例
SELECT *FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=ServerName;User ID=MyUID;Pas ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
- easy_UI 投票列表
首先我们考虑一下在项目投票种用到的属性(ID,投票标题,备选项目,参与人数) entity package cn.entity; public class GridNode { private Lon ...
- BenUtils组件和DbUtils组件
BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...
- jenkins / ant / jmeter 持续集成接口自动化
1. 将 jmeter 脚本放在/var/lib/jenkins/workspace/Jmeter_auto/jmxpath路径下 2. 点击http://jk.facebank.net.cn/job ...