无法在 spring-boot 应用程序中从 Consul 读取配置

2024-01-08

我正在创建一个Spring Boot应用程序,它将读取诸如数据库属性之类的配置Consul。但我无法使用我的应用程序从 Consul 读取键值。以下是我正在尝试做的事情。

**pom.xml**
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tuturself</groupId>
    <artifactId>spring-boot-consul</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.retry.version>1.2.1.RELEASE</spring.retry.version>
        <consul.version>1.1.2.RELEASE</consul.version>
        <consul.discovery.version>1.1.2.RELEASE</consul.discovery.version>
        <jackson.version>2.8.1</jackson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-consul-discovery</artifactId>
            <version>${consul.discovery.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
            <version>${spring.retry.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-consul-dependencies</artifactId>
                <version>1.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

以下是我的主要课程:

@EnableRetry
@RefreshScope
@EnableDiscoveryClient
@SpringBootApplication
@ComponentScan("com.test.*")
public class SpringBootConsulApplication {

    private static ConsulConfiguration consulConfiguration;

    public static void main(String[] args) {
        try {
            String consulHost = System.getProperty("spring.cloud.consul.host");
            System.out.println("consulHost ::" + consulHost);
            String consulPort = System.getProperty("spring.cloud.consul.port");
            System.out.println("consulPort ::" + consulPort);
            String consulPrefix = System.getProperty("spring.cloud.consul.config.prefix");
            System.out.println("consulPrefix ::" + consulPrefix);
            new SpringApplicationBuilder(SpringBootConsulApplication.class).web(true).run(args);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

我正在使用以下命令读取领事属性@Value注解:

@Configuration
@EnableConfigurationProperties(PropertySourceBootstrapProperties.class)
public class ConsulConfiguration {

    @Value("${cassandra.host}")
    private String cassandraHost;

    @Value("${cassandra.user}")
    private String userName;

    @Value("${cassandra.password}")
    private String password;
}

我有我的bootstrap.yml在资源文件夹中:

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      enabled: true
      config:
        enabled: true
        prefix: config/application
        defaultContext: apps
        profileSeparator: '::'
  application:
    name: spring-boot-consul

Consul 已在我的本地系统中启动并运行localhost:8500我在哪里有文件config/application/spring-boot-consul.yml file;

spring:
  application:
    name: spring-boot-consul
cassandra:
  host: 127.0.0.1:9042,127.0.0.2:9042
  user: my_user
  password: my_pass
  pooling:
    maxThread: 10
    timeout: 50
  keyspace:
    name: test_keyspace
    readConsistency: ONE
    writeConsistency: ONE

当我启动应用程序时,它显示无法绑定cassandra.host in my ConsulConfiguration班级。从而停止应用程序。有什么提示吗,我在这里做错了什么?


你可以找到一个工作示例here https://github.com/indrabasak/spring-consul-example.

Consul配置KV存储

您需要通过 Consul UI 或命令行将属性存储在 Consul KV 存储中。Consul Agent不会从文件系统加载您的属性。要从命令行加载属性,一旦 Consul Agent 启动并运行,您可以使用以下命令。可以通过在文件名前添加 @ 符号来从文件中读取 YAML 数据。

./consul kv put config/application/data @spring-boot-consul.yml

where config/application/data是键名。

如果数据成功写入KV,您应该得到以下响应,

Success! Data written to: config/application/data

您还可以使用以下命令从 KV 获取属性:

$ ./consul kv get config/application/data
cassandra:
  host: 127.0.0.1:9042,127.0.0.2:9042
  user: my_user
  password: my_pass

您还可以从 Consul Web UI 查看属性,

bootstrap.yml 的更改

您需要修改您的bootstrap.yml轻微地。以下是变化:

  • prefix价值config
  • defaultContext价值application
  • Added format to yaml
  • Added data-key以...的名义data获取 YAML blob。

    spring:
      profiles: default
      cloud:
        consul:
          host: localhost
          port: 8500
          config:
            enabled: true
            prefix: config
            defaultContext: application
            data-key: data
            profileSeparator: '::'
            format: yaml
      application:
        name: spring-boot-consul
    

Consul 配置的更改

@Configuration
@RefreshScope
public class ConsulConfiguration {

    @Value("${cassandra.host}")
    private String cassandraHost;

    @Value("${cassandra.user}")
    private String userName;

    @Value("${cassandra.password}")
    private String password;

    @PostConstruct
    public void postConstruct() {
        // to validate if properties are loaded
        System.out.println("** cassandra.host: " + cassandraHost);
        System.out.println("** cassandra.user: " + userName);
        System.out.println("** cassandra.password: " + password);
    }
}

应用程序类的更改,

@EnableRetry
@RefreshScope
@EnableDiscoveryClient
@EnableAutoConfiguration
@EnableConfigurationProperties
@SpringBootApplication
@ComponentScan("com.test.*")
public class SpringBootConsulApplication {

    public static void main(String[] args) {
        ...
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 spring-boot 应用程序中从 Consul 读取配置 的相关文章

随机推荐

  • 带有页眉、页脚和正文的简单 div

    我需要一个简单的div with header footer and body content The header and footer需要是fixed和heightdiv 的应该是250px or max 500px和它的width i
  • 从标准输入 C++ 读取数百万个整数的最快方法?

    我正在开发一个排序项目 现在主要瓶颈是读取数据 我的程序需要大约 20 秒才能对从 stdin 读取的 100 000 000 个整数进行排序cin and std ios sync with stdio false 但事实证明 其中 10
  • jquery 事件在附加后不起作用

    http jsfiddle net YsnhT 2 http jsfiddle net YsnhT 2 Jquery 事件在追加后不起作用 单击 保存 按钮后 我需要文本区域的值 span8 on click btn function va
  • 调用生成的 Serializer() 方法时收到 NoClassDefFoundError

    我得到了NoClassDefFoundError当尝试调用Foo serializer 上的方法 Serializable class 这是我的测试用例 Serializable data class Foo val data String
  • XMLHttpRequest 基本身份验证失败

    知道为什么吗XMLHttpRequest具有正确的凭据Pebble JS Framework http developer getpebble com 2 guides javascript guide html在 Android 上无法进
  • 铁路搜索表

    我正在创建一个跟踪用户和成就的应用程序 例如 xbox live 等 这些表通过连接表链接 我希望在我的索引上有一个搜索表单 让用户输入用户名 然后加载一个新页面 其中包含用户已获得的所有成就的列表 我不完全确定如何在索引上设置此搜索表单
  • 你能在Sqlite3(使用Django)中实现不区分大小写的“唯一”约束吗?

    假设我正在使用 Python 2 5 的内置默认 sqlite3 并且我有一个包含以下代码的 Django 模型类 class SomeEntity models Model some field models CharField max
  • 动态构建 SQL 查询(postgres 和 javascript)

    我有一个 javascript 函数需要返回产品列表 它使用 postgres 来检索产品列表 该函数传递一个categoryId和一个可选的typeId 所以我需要基于这些构建一个 SQL 查询 当然我可以做这样的事情 async fun
  • 具有多个 bert 输入的 SMOTE

    我正在使用 Keras 和 Bert HuggingFace 构建多类文本分类模型 但我有一个非常不平衡的数据集 我使用了 Sklearn 中的 SMOTE 来为欠平衡类生成额外的样本 我总共有 45 个 当我使用 Bert Tokeniz
  • 如何使用 matplotlib 制作“更完整”的轴箭头

    我有以下代码 from mpl toolkits axes grid axislines import SubplotZero from matplotlib transforms import BlendedGenericTransfor
  • 使用 Maven 时更改 Eclipse 中 Android R.java 的输出文件夹

    我有一个使用 maven android 插件的 android 项目设置 该插件遵循 Maven 输出文件夹的位置R java文件 即target generated sources r 但是 当在 Eclipse 中使用这个项目时 我无
  • Cppcheck 内联抑制不起作用

    示例代码 class Foo cppcheck suppress noExplicitConstructor Foo int foo Cpp检查调用 cppcheck exe enable all foo cpp Checking foo
  • 如何在 T-SQL 调试时查看表变量的值?

    在调试期间 我们能否在 SQL Server Management Studio SSMS 中查看表值变量中的值 行和单元格 如果是 怎么办 DECLARE v XML SELECT FROM
  • 本地使用 Cognito [离线]

    我有一种感觉 这是一个菜鸟问题 有没有办法在本地模拟 Cognito 用户池的使用 如此离线 我有一种感觉 在开发时诉诸 aws cognito 普通用户池是没有必要的 我现在知道无服务器有一个可以离线使用的插件 但没有找到用于 cogni
  • 在模拟中控制内存分配/GC?

    我在弄清楚如何减少运行在模拟中的内存使用和 GC 时间时遇到了一些麻烦State单子 目前我必须运行编译后的代码 RTS K100M为了避免堆栈空间溢出 GC 统计数据非常可怕 见下文 以下是相关代码片段 完整的工作 GHC 7 4 1 代
  • 整数是如何在底层转换为字符串的?

    我想真正的问题是如何将 base2 binary 转换为 base10 最常见的应用可能是创建输出字符串 将二进制数字数据块转换为字符数组 这具体是如何完成的 我猜 鉴于可能没有为每个数值预定义一个字符串 我猜测计算机从右到左遍历整数的每一
  • arc4random 和 % 运算符

    我对 Objective C 中的 arc4random 函数有疑问 我在网上看到的例子中有一个 函数调用后的符号 我想 作为模运算符 该符号在之后使用时是否有其他含义arc4random 它是如何工作的 没有什么特殊意义 之后应用模数ar
  • C#中如何判断数字是否可被整除?

    我需要知道如何执行此程序 calculation1 1 4 0 25 calculation2 1 8 0 125 calculation3 47 183 0 25683060109289617486338797814207 calcula
  • 图数据库新手Q-如何决定2个节点之间关系的方向

    你如何决定关系的动词方向 例如 我有一个国家属于子区域 而子区域又属于区域 哪一个更好 在决定方向方面有什么经验法则吗 地区 HAS gt 子区域 HAS gt 国家 地区 or 区域 问候 桑 我同意 InverFalcon 的观点 即方
  • 无法在 spring-boot 应用程序中从 Consul 读取配置

    我正在创建一个Spring Boot应用程序 它将读取诸如数据库属性之类的配置Consul 但我无法使用我的应用程序从 Consul 读取键值 以下是我正在尝试做的事情 pom xml