记录分享公司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移到这里去加载了....不过我暂时没有发现这有什么优点....

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相当于是数据存储的路径方式,所以是跟着数据源走的...

总结

也没啥好总结的...上面就是公司的主要用法...自己简单玩玩的话似乎不需要这么复杂...不知道其他公司是怎么配置的...等我有新的发现的时候再补充说明吧...

时间: 2024-08-03 19:28:21

记录分享公司Spring data相关配置的相关文章

记录一次Spring Data Solr相关的错误解决

记录一次Spring Data Solr相关的错误解决 生活本不易,流人遂自安 相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有些方法已经和以前的版本有些大不一样了.本次主要表达的是分组查询的不同. 问题描述 以前的分组查询是这样的: 创建分组对象,并设置查询条件 构建分组选项并且设置分组选项 获取分组页 获取分组结果对象 获取分组入口也groupEntries 从入口页中获取入口集合getContent 如果你按照这种设置

Spring Data Jpa配置

Spring Data JPA提供的接口,也是Spring Data JPA的核心概念: 1:Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别. 2:CrudRepository :是Repository的子接口,提供CRUD的功能 3:PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能 4:JpaRepository:是PagingAndSortingR

Spring IOC 相关配置-总结

基于XML配置 基于注解配置 基于java类配置 基于Groovy DSL 使用场景 Bean来自第三方,如DataSource.JdbcTemplate等,因为无法在类中标注注解,所以通过xml方式配置比较好. 使用其他命名空间,如aop,context等,只能采用基于xml的配置 Bean的实现类用户开发 实例化bena的逻辑比较复杂 可以通过代码方式控制bean初始化的整体逻辑,如果初始化逻辑比较复杂,则比较适合java类配置的方式 优势在于可以通过Groovy脚本灵活控制Bean初始化的

Java Spring Bean相关配置

1.Bean配置信息组成部分: (1)Bean实现类 (2)Bean的属性信息 (3)Bean的依赖关系 (4)Bean的行为配置 2.配置方式: (1)XML配置 (2)注解配置 (3)Java类配置 (4)Groovy动态语言配置 3.不同配置方式比较 2018-04-15 原文地址:https://www.cnblogs.com/Johar/p/8837758.html

Spring Data JPA 1.10.1 详解二之快速Demo

一.maven配置文件加入依赖 Spring Data JPA 依赖,最新稳定的版本为1.10.1.RELEASE,这里需要说明下的是,其依然依赖hibernate JPA相关JAR,hibernate-core之类的是不需要的.hibernate是JPA规范的一种实现,所以需要加入其依赖.ehcache是hibernate二级缓存的配置,不是必须的. <dependency>         <groupId>org.springframework.data</groupI

spring data jpa学习笔记一:helloworld

在学习 JPA Spring Data之前,我们有必要了解一下JPA和Spring Data. JPA JPA全称Java Persistence API.即java持久化规范.JPA通过注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. Spring Data Spring Data是Spring框架的一个子项目,就像Spring MVC是Spring的一部分一样.使得数据库访问变得方便和快捷.Spring Data 支持JPA. JPA Spring Data J

spring + springMVC + spring Data + jpa + maven 项目框架搭建

首先看一下项目结构: 所用到的jar(pom.xml): <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xs

SpringBoot入门 (五) 数据库访问之spring data jpa

本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象.关联映射工具来管理Java应用中的关系数据.主要是为了简化现有的持久化开发工作和整合ORM技术,对不同的ORM框架提供统一的规范标准. Spring Data JPA 是Spring基于Hibernate框架和JPA(Java Persistence API)规范的基础上封装

快速搭建springmvc+spring data jpa工程

一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblogs.com/hujunzheng/p/5450255.html 三.配置文件说明 1.application.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/springdata?u