Guice-JPA persistance.xml не читает заполнители из файла свойств

Я использую модуль Guice-JPA со спящим режимом для выполнения операций DAO.

При жестком кодировании информации о подключении в файле persistence.xml все работает нормально. но когда я пытаюсь использовать файл свойств для параметров подключения, persistence.xml просто обрабатывает их как пустую строку, и я получаю исключение.

вот мой код гуиса и Persistense.xml.

    JpaPersistModule jpaModule = new JpaPersistModule("myModule");
    Properties properties = new Properties();
    try {
        properties.load(Bootstrap.class.getClassLoader().getResourceAsStream("appConfig.properties"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    JpaPersistModule module = jpaModule.properties(properties);
    injector = Guice.createInjector(new ApplicationConfig(), module);
    PersistService persistService = injector.getInstance(PersistService.class);
    persistService.start();

После этого кода я подтвердил от отладчика, что объект свойств содержит все свойства, поэтому я уверен, что он правильно прочитал файл свойств.

вот файл свойств и persistence.xml

hibernate.username=root

    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
   <persistence-unit name="24x7monitoring" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.show_sql" value="false" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/dbname"/>
        <property name="javax.persistence.jdbc.user" value="${hibernate.username}" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

I get the following exception:

 Access denied for user ''@'localhost' to database 

Пожалуйста, сообщите, почему файлы свойств не читаются модулем JPA, зная, что он отлично работает без заполнителей.


person Sammy    schedule 06.10.2013    source источник


Ответы (1)


Вы не можете использовать заполнители или заменяющие переменные в persistence.xml, как вы пытаетесь сделать. Свойства, которые вы передаете JpaPersistModule, являются альтернативой определению элементов <property> в persistence.xml.

Например, вместо этой строки в persitence.xml:

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

Вы можете определить то же свойство внутри вашего *.properties файла:

javax.persistence.jdbc.driver=com.mysql.jdbc.Driver

Поэтому вы должны удалить эту неверную строку:

<property name="javax.persistence.jdbc.user" value="${hibernate.username}" />

и добавьте такую ​​запись в свой файл свойств:

javax.persistence.jdbc.user=my_username
person David Levesque    schedule 06.10.2013