带有数据库后端的 Spring Cloud 配置服务器

问题描述 投票:0回答:3

我正在尝试创建一个 Spring Cloud 配置服务器,它从

database
而不是从默认的 git-repo 获取其配置。

每次我尝试运行配置服务器应用程序时,都会收到此错误:

Execution failed for task ':config-server:applications:config-server:bootRun'.
> Process 'command 'C:\Program Files\choco\openjdk-jdk-11\latest\bin\java.exe'' finished with non-zero exit value 1

从服务器本身发出此消息(为了更好的阅读而重新格式化):

[ERROR agnostics.LoggingFailureAnalysisReporter : 
APPLICATION FAILED TO START
Description: Invalid config server configuration.
Action: If you are using the git profile, you need to set a Git URI in your configuration.  If you are using a native profile and have spring.cloud.config.server.bootstrap=true, you need to use a composite configuration.
[main||||||| - |]]

我的application.yaml中有这部分:

spring:
  application:
    name: my-services-api
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    platform: h2
    hikari:
      connection-timeout: 5000
      maximum-pool-size: 10
  cloud:
    config:
      server:
        jdbc:
          sql: SELECT KEY, VALUE from MY_PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?
          order: 1
  h2:
    console:
      enabled: true

如你所见,没有

spring.cloud.config.server.bootstrap=true
所以我不知道它要我做什么。
我也不想使用 git 配置文件,所以该操作对我根本没有帮助。

有人知道我该如何解决这个问题吗?谢谢

更新: 我添加了

spring.cloud.config.server.git.uri
并将 jdbc 的顺序更改为 1,将 git 的顺序更改为 2。
之后它有点工作,但我仍然有问题,它不会从数据库读取配置
我从头开始,做了同样的事情,然后效果很好

java h2 spring-cloud-config spring-cloud-config-server
3个回答
2
投票

我正在尝试调试您的问题,我有以下设置,可以成功启动服务器并查询 API。

我的 Maven 构建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.test</groupId>
    <artifactId>config-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-server</name>
    <description>Test Config Server</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>       
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>         
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

主课

@EnableConfigServer
@SpringBootApplication
public class ConfigserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigserverApplication.class, args);
    }

}
#bootstrap.yml
spring:
  application:
    name: my-services-api
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    platform: h2
    hikari:
      connection-timeout: 5000
      maximum-pool-size: 10
  profiles:
    active: jdbc
  cloud:
    config:
      server:
        jdbc:
          sql: "SELECT properties.key, properties.value from properties where application=? and profile=? and label=?"
          order: 1
  h2:
    console:
      enabled: true

我还将 schema.sql 和 data.sql 放入类路径(maven 项目的资源文件夹)中,以便它们将数据自动填充到嵌入式 h2 数据库中。

#schema.sql

DROP TABLE IF EXISTS PROPERTIES;
    
CREATE TABLE PROPERTIES (
  id INT AUTO_INCREMENT  PRIMARY KEY,
  APPLICATION VARCHAR(25) NOT NULL,
  PROFILE VARCHAR(25) NOT NULL,
  LABEL VARCHAR(25) DEFAULT NULL,
  KEY VARCHAR(25) NOT NULL,
  VALUE VARCHAR(200) NOT NULL   
);
    
#data.sql
    
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.1', 'prop1', 'val11');
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.1', 'prop2', 'val12');
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.1', 'prop3', 'val13');
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.0', 'prop1', 'val21');
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.0', 'prop2', 'val22');
INSERT INTO PROPERTIES( APPLICATION, PROFILE, LABEL, KEY, VALUE) 
values('myapp', 'MYCLIENT', '1.0', 'prop3', 'val23');

我可以成功启动并查询配置服务器


1
投票

您的 application.yaml 文件缺少以下属性: 春天: 简介: 活动:jdbc

我已经为带有 JDBC 后端的云配置服务器实现了类似的项目,下面是参考: https://github.com/Santhoshinftech/cloud-config-custom-svc


0
投票

您应该通过

adding spring-boot-starter-data-jdbc
到类路径并使用
jdbc
配置文件或添加
JdbcEnvironmentRepository

类型的 bean 来启用 JDBC 后端功能

参见文档:https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_jdbc_backend

© www.soinside.com 2019 - 2024. All rights reserved.