SpringDataJPAを使ったDB関連の設定を、異なる設定方法で共有する方法
Maven, Spring4, SpringDataJPAを使ったWEBアプリケーションを作成しており、
おおまかですが、下記のような構成になっています。
spring-webプロジェクト
web.xm
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
spring-context.xml
<import resource="classpath:spring-datasource.xml"/>
<context:component-scan base-package="{package}"/>
<mvc:annotation-driven />
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/img/**" location="/WEB-INF/img/" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
database.properties
hibernate.generate_statistics = true
hibernate.show_sql = true
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://host:3306/db
jdbc.username=user
jdbc.password=user
spring-serviceプロジェクト
spring-datasource.xml
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:schema.sql"/>
</jdbc:embedded-database>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
<property name="packagesToScan" value="${package}"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>
<!-- jpa -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<context:property-placeholder location="classpath:database.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${hibernate.show_sql}"/>
<property name="generateDdl" value="true"/>
<property name="database" value="MYSQL"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
この後、バッチプロジェクトにて
DBの基本構造(spring-datasource.xmlまで)を共有したいのですが、
spring-webプロジェクトでは設定ファイルがweb.xml始動であり、
今後共通化するspring-batch(現状DB接続していない)プロジェクトでは、
実行クラスから設定クラスを呼び出す形になっています。
main.java
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringBatchConfig.class);
ExecClass o = ctx.getBean(ExecClass.class);
o.execute();
この場合、双方で設定方法が異なると、共通(spring-serviceプロジェクトのspring-context.xmlからspring-datasource.xmlまで)の設定を読み込むことはできないのでしょうか?