zoukankan      html  css  js  c++  java
  • Spring-data-jpa操作数据库环境配置

    application.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    <context:property-placeholder location="classpath*:properties/*.properties"/> //数据库连接参数
    <context:component-scan base-package="com.jerry.service"/> //设置自动扫描service包
    <context:annotation-config/>

    </beans>

    applicationContext-dataSource.xml 设置数据库连接属性

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    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-4.2.xsd">

    <!--上面的xsd最好和当前使用的Spring版本号一致,如果换了Spring版本,这个最好也跟着改-->

    <!-- 使用阿里的druid配置数据源 start-->
    <!--具体查看官网信息:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!--这三个变量读取config.properties的-->
    <property name="url" value="${data_source_url}"/>
    <property name="username" value="${data_source_username}"/>
    <property name="password" value="${data_source_password}"/>

    <!-- 初始化连接大小 -->
    <property name="initialSize" value="1"/>
    <!-- 初始化连接池最大使用连接数量 -->
    <property name="maxActive" value="20"/>
    <!-- 初始化连接池最小空闲 -->
    <property name="minIdle" value="1"/>

    <!-- 获取连接最大等待时间,单位毫秒-->
    <property name="maxWait" value="60000"/>

    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000"/>
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="25200000"/>

    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <!--如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
    <property name="poolPreparedStatements" value="false" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

    <property name="validationQuery" value="${validation_query}"/>
    <property name="testWhileIdle" value="true"/>
    <property name="testOnBorrow" value="false"/>
    <property name="testOnReturn" value="false"/>


    <!--当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接-->
    <!--配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈。-->
    <!--具体查看官网信息:https://github.com/alibaba/druid/wiki/%E8%BF%9E%E6%8E%A5%E6%B3%84%E6%BC%8F%E7%9B%91%E6%B5%8B-->
    <!-- 打开removeAbandoned功能 -->
    <property name="removeAbandoned" value="true"/>
    <!-- 1800秒,也就是30分钟 -->
    <property name="removeAbandonedTimeout" value="1800"/>
    <!-- 关闭abanded连接时输出错误日志 -->
    <property name="logAbandoned" value="true"/>

    <!-- 配置监控统计拦截的filters-->
    <!--官网信息:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter-->
    <!--mergeSql可以合并输出的sql,方便查看,但是在mybatis框架中使用这个则无法监控sql,需要用stat-->
    <!--<property name="filters" value="mergeSql,log4j"/>-->
    <!--<property name="filters" value="mergeSql,wall"/>-->
    <!--<property name="filters" value="stat"/>-->
    <!--<property name="filters" value="mergeSql"/>-->
    <property name="filters" value="stat,log4j"/>
    </bean>
    <!-- 使用阿里的druid配置数据源 end-->

    </beans>

    applicationContext-jpa.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/data/jpa
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <!--上面的xsd最好和当前使用的Spring版本号一致,如果换了Spring版本,这个最好也跟着改-->

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">


    <property name="persistenceUnitName" value="Jerry"/>
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property> //persistence.xml文件配置(不展示)

    <property name="dataSource" ref="dataSource"/>

    <!--zchtodo 这个作用是什么?-->
    <property name="jpaDialect">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    </property>


    <!-- 指定Jpa持久化实现厂商类,这里以Hibernate为例 -->
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
    <!-- 指定Entity实体类包路径 -->
    <property name="packagesToScan">
    <list>
    <value>com.jerry.entity</value>
    </list>
    </property>
    <!-- 指定JPA属性;如Hibernate中指定是否显示SQL的是否显示、方言等 -->
    <property name="jpaProperties">
    <!--hibernate 官网说明这些配置属性:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html-->
    <props>
    <!--常见的还有 MySQL5Dialect、MySQL5InnoDBDialect、MySQL57InnoDBDialect、MySQLDialect、MySQLInnoDBDialect、MySQLMyISAMDialect-->
    <!--如果你使用的数据库是 5.7 的话可以考虑用:MySQL57InnoDBDialect-->
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
    <!--是否显示 SQL-->
    <prop key="hibernate.show_sql">true</prop>
    <!--如果显示 SQL,输出的 SQL 时候要格式化-->
    <prop key="hibernate.format_sql">true</prop>
    <!--在显示的 SQL 中增加一些 Hibernate 提供的注释说明,依此来解释它生成的 SQL 意思-->
    <!--配置如何根据java模型生成数据库表结构,常用update,validate-->
    <prop key="hibernate.use_sql_comments">true</prop>
    <prop key="hibernate.hbm2ddl.auto">none</prop>
    <!--关于这个属性可以看:http://blog.csdn.net/dracotianlong/article/details/27834143-->
    <!--ImprovedNamingStrategy 是采用下划线,符合我们一般命名表字段的习惯-->
    <!--所以,命名规则 My_NAME->MyName-->
    <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>

    <prop key="hibernate.generate_statistics">false</prop>
    </props>
    </property>

    </bean>


    <!-- Hibernate对Jpa的实现 -->
    <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>

    <!-- 重要配置:启用扫描并自动创建代理的功能 -->
    <jpa:repositories base-package="com.jerry.reposity" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>

    </beans>

    applicationContext-transaction.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

    <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />
    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
    <property name="patterns">
    <list>
    <value>com.youmeek.ssm.module.*.service.*</value>
    </list>
    </property>
    </bean>

    <aop:config proxy-target-class="true">
    <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />
    </aop:config>
    <!-- Druid 和 Spring 关联监控配置 end-->



    <!-- 事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>


    <!-- 启用注解方式1:开启注解事务 start-->
    <!--<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />-->
    <!-- 启用注解方式1:开启注解事务 end-->

    <!-- 启用注解方式2:开启AOP事务方式 start-->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!--REQUIRED 表示:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。-->
    <tx:method name="save*" propagation="REQUIRED"/>
    <tx:method name="insert*" propagation="REQUIRED"/>
    <tx:method name="add*" propagation="REQUIRED"/>
    <tx:method name="register*" propagation="REQUIRED"/>
    <tx:method name="update*" propagation="REQUIRED"/>
    <tx:method name="modify*" propagation="REQUIRED"/>
    <tx:method name="edit*" propagation="REQUIRED"/>
    <tx:method name="batch*" propagation="REQUIRED"/>
    <tx:method name="delete*" propagation="REQUIRED"/>
    <tx:method name="del*" propagation="REQUIRED"/>
    <tx:method name="deleteAndRepair" propagation="REQUIRED"/>
    <tx:method name="remove*" propagation="REQUIRED"/>
    <tx:method name="time*" propagation="REQUIRED"/><!--定时器方法-->
    <tx:method name="repair" propagation="REQUIRED"/>


    <!--以这些单词开头的方法不加入事务-->
    <!--SUPPORTS 表示:支持当前事务,如果当前没有事务,就以非事务方式执行。-->
    <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="datagrid*" propagation="SUPPORTS" read-only="true"/>
    <tx:method name="show*" propagation="SUPPORTS" read-only="true"/>
    </tx:attributes>
    </tx:advice>

    <aop:config>
    <aop:pointcut id="transactionPointcut" expression="execution(* com.jerry.service.impl.*.*(..) )"/>
    <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
    </aop:config>
    <!-- 启用注解方式2:开启AOP事务方式 end-->

    </beans>
  • 相关阅读:
    接口测试-自动化-Java实现-HttpUtil
    接口测试-自动化-Java实现-CommonClass
    接口测试-自动化-Java实现-InterfaceTest
    接口测试-自动化-Java实现-HtmlFile
    接口测试-自动化-Java实现-TestMain
    接口测试-自动化-Java-思路整理后
    接口测试-自动化-Java-思路
    接口测试-自动化-Java-写在前面的话
    HDU 2546 饭卡 (01背包)
    codeforces 615B. Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/shirandedan/p/7251220.html
Copyright © 2011-2022 走看看