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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM