我有一个小问题,我想将Java Spring应用程序部署到Cloud RUN并从CLOUD SQL SQL SERVER获取连接,我知道可以通过Unix套接字连接MySQL和Postgresql(https://cloud.google.com/sql/docs/mysql/connect-run?hl=es-419(,但对于SQL Server没有驱动程序喷气机。
另一种方法是连接代理喜欢 (https://medium.com/@petomalina/connecting-to-cloud-sql-from-cloud-run-dcff2e20152a( 我试过了,但我不能,即使在部署脚本时,它告诉我正在侦听 127.0.0.1 作为我的实例 ID,但当尝试连接时我不能。
这是我的码头工人文件
# Use the official maven/Java 8 image to create a build artifact.
# https://hub.docker.com/_/maven
FROM maven:3.5-jdk-8-alpine as builder
# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src
COPY ohJpo-2.1.0.jar .
# download the cloudsql proxy binary
# RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O ./build/cloud_sql_proxy
# RUN chmod +x ./build/cloud_sql_proxy
COPY cloud_sql_proxy /build/cloud_sql_proxy
RUN chmod +x /build/cloud_sql_proxy
# copy the wrapper script and credentials
COPY run.sh /build/run.sh
COPY credentials.json /build/credentials.json
# Build a release artifact.
RUN mvn install:install-file -Dfile=/app/ohJpo-2.1.0.jar -DgroupId=ovenfo -DartifactId=ohJpo -Dversion=2.1.0 -Dpackaging=jar
RUN mvn package -DskipTests
# Use AdoptOpenJDK for base image.
# It's important to use OpenJDK 8u191 or above that has container support enabled.
# https://hub.docker.com/r/adoptopenjdk/openjdk8
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
FROM adoptopenjdk/openjdk8:jdk8u202-b08-alpine-slim
RUN /build/cloud_sql_proxy -instances=idInstanceID=tcp:1433 -credential_file=/build/credentials.json & sleep 10
COPY --from=builder /app/target/helloworld-*.jar /helloworld.jar
# Run the web service on container startup.
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=${PORT}","-jar","/helloworld.jar"]
我我的java应用程序我有这种连接方式,在本地PC中使用代理找到机智
@GetMapping("/pruebacuatro")
String pruebacuatro() {
Map<String, String> config = new HashMap<String, String>();
config.put("type", "SQLSERVER");
config.put("url", "127.0.0.1");
config.put("db", "bd");
config.put("username", "user");
config.put("password", "pass");
Object data = null;
Jpo miJpo = null;
try {
miJpo = new Jpo(config);
Procedure store = miJpo.procedure("seg.menu_configuraciones");
data = store.ejecutar();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(miJpo != null) {
try {
miJpo.finalizar();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return "Contents json: "+(new Gson().toJson(data));
}
我想从我的 SQL Server 连接我的公共 IP 或专用 IP 但我也找不到有关这方面的信息,你有什么建议吗?
Cloud SQL 代理以 2 种模式工作:Unix 套接字和 TCP
在计算机上使用它时,应使用 TCP 模式,并且可以在本地主机 IP 中连接到它。但是,对于Cloud Run,使用的是Unix套接字模式,并且没有SQL服务器客户端可以使用此连接模式。
因此,您必须使用Cloud SQL IP将Cloud SQL实例连接到Cloud Run。
对于本地测试,请继续在 TCP 模式下使用云 SQL 代理
对于云运行,我建议您使用 SQL 服务器的私有 IP。
- 在 VPC 中公开您的实例
- 在正确的区域中创建无服务器 VPC 连接器
- 将无服务器 VPC 连接器附加到您的云运行服务
- 在代码中使用云 SQL 私有 IP 连接数据库。