Я хочу создать веб-приложение на Openshift, которые используют Tomcat, Spring и Hibernate.Openshift - Как настроить соединение mysql с использованием persistence.xml - проблемы с переменными сдвига влево
Сначала я пытался настроить базу данных с помощью persistence.xml как этот
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="springshop_pu" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.codeonblue.springshop.model.Categoria</class>
<class>com.codeonblue.springshop.model.Produto</class>
<class>com.codeonblue.springshop.model.Usuario</class> <properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true"/> <property name="hibernate.connection.charset" value="UTF-8" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
#{systemEnvironment[OPENSHIFT_MYSQL_DB_HOST]}
<property name="javax.persistence.jdbc.user" value="#{systemEnvironment[OPENSHIFT_MYSQL_DB_USERNAME]}"/>
<property name="javax.persistence.jdbc.password" value="#{systemEnvironment[OPENSHIFT_MYSQL_DB_PASSWORD]}"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://#{systemEnvironment[OPENSHIFT_MYSQL_DB_HOST]}:#{systemEnvironment[OPENSHIFT_MYSQL_DB_PORT]}/#{systemEnvironment[OPENSHIFT_APP_NAME]}"/>
</properties>
используя следующие, но когда я пытаюсь создать EntityManagerFactory я получаю эту ошибку:
java.lang.NumberFormatException: For input string: "#{systemEnvironment[OPENSHIFT_MYSQL_DB_PORT]}"
Позже я попытался изменить мое persistence.xml следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="springshop_pu" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.codeonblue.springshop.model.Categoria</class>
<class>com.codeonblue.springshop.model.Produto</class>
<class>com.codeonblue.springshop.model.Usuario</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.connection.charset" value="UTF-8" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="${env.OPENSHIFT_MYSQL_DB_USERNAME}"/>
<property name="javax.persistence.jdbc.password" value="${env.OPENSHIFT_MYSQL_DB_PASSWORD}"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}"/>
</properties>
</persistence-unit>
</persistence>
Но я получил эту ошибку:
java.sql.SQLException: Must specify port after ':' in connection string
Мне кажется, что переменные базы данных OpenShift являются недействительными.
Это сервлет, что я делаю тестирование:
@WebServlet("/GenerateTables")
public class GenerateTables extends HttpServlet {
private static final long serialVersionUID = 1L;
public GenerateTables() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Host: " + System.getenv("OPENSHIFT_MYSQL_DB_HOST"));
System.out.println("Port: " + System.getenv("OPENSHIFT_MYSQL_DB_PORT"));
System.out.println("Username: " + System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"));
System.out.println("Password: " + System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"));
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("springshop_pu");
factory.close();
System.out.println("Let's see if the tables were generated");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Однако эти команды в сервлет
System.out.println("Host: " + System.getenv("OPENSHIFT_MYSQL_DB_HOST"));
System.out.println("Port: " + System.getenv("OPENSHIFT_MYSQL_DB_PORT"));
System.out.println("Username: " + System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"));
System.out.println("Password: " + System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"));
показывают значения переменных в Tomcat Log
Что я делаю Неправильно здесь?
Пожалуйста, помогите мне