1. Можете ли вы по-прежнему использовать конфигурацию источника данных Tomcat? Если да, то как он знает, какой профиль использовать?
Вы можете использовать конфигурацию данных Tomcat, однако определение источника данных не будет иметь ничего общего с профилями Spring или Spring. Если вы используете подход JNDI, вы можете указать несколько источников данных и указать, что один из них используется в вашем приложении через свойства профиля, однако фактическое определение не будет иметь ничего общего с Spring.
Или вы можете использовать источник данных, не относящийся к JNDI, который настроен весной и, возможно, использует профили.
2. Как настроить persistence.xml для нескольких сред? Если реквизиты подключения jdbc даже находятся в состоянии persistence.xml
Нет, вам нужно всего лишь минимальное сохранение persistence.xml при использовании Spring или, возможно, совсем нет.
3. Как настроить активный профиль без повторной компиляции?
Вы не
может Ниже все, что вам нужно, чтобы получить и работает с не JNDI источника данных.
Пример конфигурации Пружина (не JNDI):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jpa="http://www.springframework.org/schema/data/jpa" 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.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<jpa:repositories base-package="uk.co.certait.spring.data.repository" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter" ref="jpaAdapter"></property>
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.ddl.auto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show.sql}</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.cache.use_second_level_cache">${hibernate.enable.cache}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
</bean>
<bean id="jpaAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
<bean class="org.springframework.orm.jpa.JpaTransactionManager"
id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
</beans>
Пример Спринг Datasource Определение
<?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-3.1.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>${database.url}</value>
</property>
<property name="username">
<value>${database.username}</value>
</property>
<property name="password">
<value>${database.password}</value>
</property>
</bean>
</beans>
Пример Пружина профиля Определение:
<?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-3.1.xsd">
<beans profile="default">
<bean id="applicationPropertiesPlaceholder"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:profiles/hsqldb.profile.properties</value>
</list>
</property>
</bean>
</beans>
<beans profile="hsqldb">
<bean id="applicationPropertiesPlaceholder"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:profiles/hsqldb.profile.properties</value>
</list>
</property>
</bean>
</beans>
<beans profile="mysql">
<bean id="applicationPropertiesPlaceholder"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:profiles/mysql.profile.properties</value>
</list>
</property>
</bean>
</beans>
<beans profile="mssql">
<bean id="applicationPropertiesPlaceholder"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:profiles/mssql.profile.properties</value>
</list>
</property>
</bean>
</beans>
</beans>
Минимально Persisteance.XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceUnit"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
<property name="hibernate.connection.charSet" value="UTF-8" />
</properties>
</persistence-unit>
</persistence>
Пример профиля Свойства файла:
#MySQL
#database.url=jdbc:mysql://localhost:3306/test
database.url=jdbc:log4jdbc:mysql://localhost:3306/test
#database.driver=com.mysql.jdbc.Driver
database.driver=net.sf.log4jdbc.DriverSpy
database.username=root
database.password=password
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show.sql=false
hibernate.ddl.auto=create
hibernate.enable.cache=false
Спасибо за ответ и код примера! Вопрос о JNDI vs Spring Datasource, есть ли какие-либо компромиссы или опираются на использование JNDI над Non JNDI? – greyfox