Как подключиться к Cloud sql при использовании экземпляра движка приложения во время выполнения Java 21?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Как подключиться к Cloud sql при использовании экземпляра движка приложения во время выполнения Java 21?

Сообщение Гость »

У меня есть приложение Java ee 8, которое я перенес в приложение Jakarta 10. Я использую стандартный сервер Google App Engine. Недавно я перенес его на среду выполнения Java 17, он подключался к базе данных Cloud sql, и все работало хорошо. Вот мой файл pom.xml

Код: Выделить всё

   
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

com.figjaminc
XXXXX
1.0
war

XXXX


${project.build.directory}/endorsed
UTF-8





com.google.cloud
libraries-bom
26.30.0
pom
import






org.eclipse.persistence
org.eclipse.persistence.core
4.0.0



org.eclipse.persistence
eclipselink
4.0.0



org.eclipse.persistence
org.eclipse.persistence.jpa
4.0.0



org.eclipse.persistence
org.eclipse.persistence.json
4.0.0



com.fasterxml.jackson.core
jackson-core
2.16.1



com.fasterxml.jackson.core
jackson-databind
2.16.1



com.google.appengine
appengine-api-1.0-sdk
2.0.12
jar



org.apache.poi
poi
3.17
jar


com.sendgrid
java-http-client
4.3.6
jar



jakarta.platform
jakarta.jakartaee-api
10.0.0



org.glassfish.jersey.containers
jersey-container-servlet
3.1.5 



org.glassfish.jersey.media
jersey-media-json-jackson
3.1.5



org.glassfish.jersey.inject
jersey-hk2
3.1.5  



com.mysql
mysql-connector-j
8.3.0



org.json
json
20231013



com.google.code.gson
gson
2.8.5



com.google.cloud
google-cloud-core




com.sendgrid
sendgrid-java
4.7.2
jar



com.google.cloud
google-cloud-storage



com.google.cloud
google-cloud-tasks




org.apache.commons
commons-csv
1.9.0



com.google.cloud.sql
mysql-socket-factory-connector-j-8
1.17.0




org.projectlombok
lombok
1.18.30





javax.servlet
jstl
1.2







com.google.cloud.tools
appengine-maven-plugin
2.2.0

false

XXXXX
9





org.apache.maven.plugins
maven-compiler-plugin
3.8.1

17
17

${endorsed.dir}




org.apache.maven.plugins
maven-war-plugin
3.3.2

false





вот как я настроил свой appengine-web.xml

Код: Выделить всё

    

java21
true
true

true

F2
Я могу создатьentityManagerFactory при запуске моего приложения здесь

Код: Выделить всё

         package com.figjaminc.startup;

import com.google.cloud.ServiceOptions;
import jakarta.persistence.Persistence;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

public class WebAppStartStop implements ServletContextListener {

private static final String class_name = "WebAppStartStop";

private static final Logger LOGGER = Logger.getLogger(WebAppStartStop.class.getName());

@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {

String startupReport = "";

startupReport += initializeEntityManager();
LOGGER.info("WebAppStartStop startup_report:" + startupReport);
}

private String initializeEntityManager() {
String projectId = ServiceOptions.getDefaultProjectId();

Map  persistenceMap = new HashMap();

//set sandbox credentials
if (projectId.equals("xxx-sandbox")) {
persistenceMap.put("jakarta.persistence.jdbc.url", "jdbc:mysql://google/xxxdb?cloudSqlInstance=xxx:us-central1:xxxdb3&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false");
persistenceMap.put("jakarta.persistence.jdbc.user", "xxxuser");
persistenceMap.put("jakarta.persistence.jdbc.driver", "com.mysql.cj.jdbc.Driver");

}//if
else if (projectId.equals("xxx")) {//set live credentials
persistenceMap.put("jakarta.persistence.jdbc.url", "jdbc:mysql://google/xxxlivedb?cloudSqlInstance=xxx:us-central1:xxxdblive&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false");//changed for new demo
persistenceMap.put("jakarta.persistence.jdbc.user", "xxxliveuser");
persistenceMap.put("jakarta.persistence.jdbc.driver", "com.mysql.jdbc.Driver");
}//else
else {
persistenceMap.put("jakarta.persistence.jdbc.url", "jdbc:mysql://localhost:3306/xxxdb?zeroDateTimeBehavior=CONVERT_TO_NULL");
persistenceMap.put("jakarta.persistence.jdbc.user", System.getenv("db_username"));
persistenceMap.put("jakarta.persistence.jdbc.password", System.getenv("db_password"));
persistenceMap.put("jakarta.persistence.jdbc.driver", "com.mysql.cj.jdbc.Driver");
}//else

CommonDbMethods.factory = Persistence.createEntityManagerFactory("com.xxx_xxx_war_1.0PU", persistenceMap);
return "Entity Manager initialized";
}

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {

LOGGER.info("Shutting Down");
}
}
[*]Я попробовал сценарий, который работает: удаление app-engine-apis из appengine-web.xml, и мое приложение подключается. но мне это нужно, потому что без него сеансы не работают.
[*]При текущей конфигурации, которую я настроил, приложение не подключается к базе данных.


Подробнее здесь: https://stackoverflow.com/questions/781 ... 21-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»