Spring Cloud 配置 JDBC 后端

Posted

技术标签:

【中文标题】Spring Cloud 配置 JDBC 后端【英文标题】:Spring Cloud Config JDBC Backend 【发布时间】:2018-05-12 01:38:28 【问题描述】:

我有必要配置 Spring Cloud Config Server 以从 JDBC 后端 (PostgreSQL) 而不是 Git 存储库读取各种实例的属性。我遵循官方文档,但不起作用。 我添加到 Spring Cloud Config Server 的 application.properties

spring.profiles.active=jdbc
spring.datasource.url= jdbc:postgresql://localhost:5432/example
spring.datasource.username=user
spring.datasource.password=pass

我在数据库中创建表

CREATE TABLE public."PROPERTIES"
(
    "APPLICATION" character varying(500) COLLATE pg_catalog."default",
    "PROFILE" character varying(500) COLLATE pg_catalog."default",
    "LABEL" character varying(500) COLLATE pg_catalog."default",
    "KEY" character varying(500) COLLATE pg_catalog."default",
    "VALUE" character varying(500) COLLATE pg_catalog."default"
)

对于尤里卡服务器,我插入

INSERT INTO public."PROPERTIES"
("APPLICATION", "PROFILE", "LABEL", "KEY", "VALUE")
VALUES('discovery-service', '', '', 'spring.application.name', 'discovery-service');
INSERT INTO public."PROPERTIES"
("APPLICATION", "PROFILE", "LABEL", "KEY", "VALUE")
VALUES('discovery-service', '', '', 'server.port', '8761');

如果我在 Git 存储库中使用此参数,Eureka 服务器可以正常工作,但使用 JDBC 后端则无法正常工作。谁能帮帮我?

【问题讨论】:

不起作用不是很具有描述性。你能提供更多细节吗?对 http:///discovery-service/default 的调用是什么样的? Whitelabel 错误页面 此应用程序没有明确的 /error 映射,因此您将其视为后备。 2017 年 11 月 28 日星期二 15:59:27 CET 出现意外错误(类型=内部服务器错误,状态=500)。 PreparedStatementCallback;错误的 SQL 语法 [SELECT KEY, VALUE from PROPERTIES where APPLICATION=?和简介=?和标签=?];嵌套异常是 org.postgresql.util.PSQLException: ERRORE: la relazione "properties" non eseste Position: 24 找不到属性表?听起来像是配置问题 我假设 SQL 中的引号使其区分大小写,你为什么这样做? 嗨,你成功了吗??我也需要它但是我从数据库中获取空白值 【参考方案1】:

说“属性”不存在的 PSQLException 是因为 PostgreSQL 区分大小写。使用 PGAdmin 创建表/列时,如果名称全部大写,该工具会自动添加引号,从而使其区分大小写。

您可以尝试以下方法:

CREATE TABLE public.properties
(
    application character varying(50) COLLATE pg_catalog."default",
    profile character varying(50) COLLATE pg_catalog."default",
    label character varying(50) COLLATE pg_catalog."default",
    key character varying(50) COLLATE pg_catalog."default",
    value character varying(500) COLLATE pg_catalog."default"
)

INSERT INTO properties
("application", "profile", "label", "key", "value")
VALUES('myconfig', 'default', 'master', 'my.message', 'hello');

application.properties 包含:

server.port=8888
spring.profiles.active=jdbc
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url= jdbc:postgresql://localhost:5432/configdb
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx

您现在可以使用http://localhost:8888/myconfig/default访问

【讨论】:

以上是关于Spring Cloud 配置 JDBC 后端的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring Cloud Config进行分布式配置:Vault 后端

在 Pivotal Cloud Foundry 上为 Spring Boot 应用程序外部化 Vault 令牌/后端配置

Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(ConfigBus)

Spring Cloud Config-Git后端

Spring Cloud Config-Git后端

vue传递表单到后端后端使用sql生成数据库表