关于Java 的maven项目整合Struts2 + Spring + SpringDataJPA 的配置问题:
1.在项目的pom.xml导入依赖坐标:
(1) IOC导入,Spring-context依赖beans、core、expression,所以不需要再重复导入其依赖的坐标,会自动导入。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--AOP导入-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring测试集成-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--WEB集成,配置监听器-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--整合持久层-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--整合日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
(2)spring整合jpa
<!--c3p0数据库连接池,如果是druid则找druid,
一般都用c3p0,这里用c3p0. -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!--hibernate 框架 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!--hibernate框架整合jpa -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
2.项目的web.xml中配置spring监听器
(1)spring配置文件位置
<context-param>
<param-name>contextConfigLocation</param-name>
<paramvalue>
classpath:applicationContext.xml</param-value>
</context-param>
<!-- spring核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.src/main/resources下建立applicationContext.xml
<!-- 扫描 @Service @Controller @Repository -->
<context:component-scan base-package="扫描mvc层的包"/>
<!-- 加载properties文件 -->
<context:property-placeholder location="classpath:config.properties" />
<!--config.properties与src/main/resources下
提供config.properties外部属性文件名一致 -->
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--${jdbc.driver}等都是外部属性文件引入jdbc.driver
必须与属性文件配置的key一致 -->
<!-- 整合JPA配置 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.
jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="实体类的包目录" />
<!-- 指定一个持久化提供者 -->
<property name="persistenceProvider">
<bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
</property>
<!-- 指定Jpa持久化实现厂商类,这里以Hibernate为例 -->
<property name="jpaVendorAdapter">
<!-- Hibernate对Jpa的实现 -->
<bean class="org.springframework.orm.jpa.vendor.
HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<!-- 声明用的数据库是Oracle,
MySQL则用下面注释掉那个-->
<property name="database" value="ORACLE" />
<!--<property name="database" value="MYSQL" /> -->
<!-- <property name="databasePlatform"value="org.hibernate.
dialect.MySQL5Dialect" /> -->
<property name="databasePlatform"
value="org.hibernate.dialect.Oracle10gDialect" />
<property name="showSql" value="true" />
</bean>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor
.HibernateJpaDialect" />
</property>
<property name="jpaPropertyMap">
<map>
<!-- 将HQL映射成sql语句-->
<entry key="hibernate.query.substitutions"
value="true 1, false 0" />
<!-- 为Hibernate关联的批量抓取设置默认数量. 建议的取值为4, 8, 和16 -->
<entry key="hibernate.default_batch_fetch_size" value="16" />
<!-- 为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树
设置最大深度. 值为0意味着将关闭默认的外连接抓取. 取值 建议在0到3之间
取值 -->
<entry key="hibernate.max_fetch_depth" value="2" />
<!-- 如果开启, Hibernate将收集有助于性能调节的统计数据.取值true | false -->
<entry key="hibernate.generate_statistics" value="true" />
<!-- 开启CGLIB来替代运行时反射机制(系统级属性). 反射机制有时在除错
时比较有用. 注意即使关闭这个优化,Hibernate还是需要CGLIB.
你不能在hibernate.cfg.xml中设置此属性.取值true | false -->
<entry key="hibernate.bytecode.use_reflection_optimizer" value="true" />
<!-- 能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定的类,
会默认开启二级缓存. 取值 true|false -->
<entry key="hibernate.cache.use_second_level_cache" value="false" />
<!-- 允许查询缓存, 个别查询仍然需要被设置为可缓存的.
取值 true|false -->
<entry key="hibernate.cache.use_query_cache" value="false" />
</map>
</property>
</bean>
<!-- JPA事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- 注解管理事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
4.src/main/resources下提供config.properties外部属性文件、log4j.properties日志配置
以上配置完成后,启动bos_management工程可以在数据库创建表,证明基本配置成功完成。