当前位置: 首页 > 知识库问答 >
问题:

基于类路径参数的Spring Boot读取属性文件

司空实
2023-03-14

我已经创建了一个独立的引导。我需要开始将其集成到更高的环境中。每个环境都有一个属性文件,其中包含特定于数据库的连接信息。由于这不存在于我的启动jar中,所以我想以某种方式添加该数据库的路径。属性文件,然后根据键读取条目。用于创建这样的bean:

<bean id="propertyLoader" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
        <value>classpath:application.properties</value>
</property>

但是在启动时,我不确定如何做到这一点:但我想指向下面的属性示例并提取我的值,并以某种方式填充我在开发中硬编码的application.properties值。

server:/config/database.properties
jdbc.username=TEST
jdbc.password=CHANGEME

正在更新我的应用程序。财产:

spring.datasource.username='jdbc.username'
spring.datasource.password='jdbc.password'

这样做可以使我的应用程序参数化。属性文件。

共有2个答案

宰父嘉胜
2023-03-14

您已经告诉过您不能在jar中包含属性文件,但仍然有多种选择。

1个

java -jar myproject.jar --spring.config.location=classpath:/database.properties 

2个

java -jar app.jar --spring.datasource.username="jdbc.username" --spring.datasource.password="jdbc.password"

在这里阅读很多其他选项'

我会选择选项1,因为在争论中传递凭据是不可取的。

柯波
2023-03-14

SpringBoot提供配置文件,基本上允许您为每个环境提供单独的application.properties文件。

您可以有如下内容:

public interface DataSourceConfig {}

@Component
@Profile("dev")
public DevDataSourceConfig implements DataSourceConfig{}

@Component
@Profile("prod")
public ProdDataSourceConfig implements DataSourceConfig{}

如果将spring概要文件“dev”设置为活动的,则只有DevDataSourceConfig bean将被实例化,并且在spring环境中,将从application-dev.properties文件中读取要注入的属性。

类似地,当您激活"prod"配置文件时,只有ProdDataSourceConfig将被实例化,并且属性将从application-prod.properties文件加载。

这允许您拥有:

---
application-dev.properties
spring.datasource.username='jdbc.username'
spring.datasource.password='jdbc.password'
---
application-prod.properties
spring.datasource.username='PROD_jdbc.username'
spring.datasource.password='PROD_jdbc.password'

如果您想从文件系统上的自定义位置加载配置-您可以检查如何使用命令行参数(文档)传递位置

例子:

java -jar boot.jar --spring.config.location=classpath:/database.properties
 类似资料:
  • 本文向大家介绍基于C++实现读取指定路径文件,包括了基于C++实现读取指定路径文件的使用技巧和注意事项,需要的朋友参考一下 电脑配置:window10, 64位操作系统,基于x64的处理器,Microsoft Visual Studio Community 2019 Version 16.4.5 实现方法:使用 boost-filessystem 包。 使用 vcpkg 安装方法: .\vcpkg

  • 问题内容: 这是我想做的,我想知道是否有任何Spring类可以帮助实现。对于这个特定的问题,我不必使用spring,我只是将其与其他所有东西一起实现。 在我的DAO层中,我想外部化我的sql文件,也就是每个文件1个sql。我想读取并缓存sql语句,甚至可能作为spring bean单例。但是在我最初的挣扎中,我只是在类路径中加载一个sql文件时遇到问题… 春天有什么可以帮助您的吗?我已经阅读过文档

  • 在docker容器中部署应用程序时,我无法使用Spring Boot实现liquibase迁移。我有一个胖罐子,它是在docker图像创建时提取的。 我有一个单独的模块,保存迁移文件。我能装上主机。xml: 然后它继续并加载其余的资源。问题在于然后从加载的资源中提取仍然正常的实际路径: 但是接下来做一些路径操作,结果是: 这反过来又不是有效的类路径: 我需要(类路径)或以能够读取文件。但它总是以上

  • 问题内容: 我正在使用“运行”->“运行”菜单从IntelliJ IDE运行一个简单的Java程序。它工作正常。现在,我想添加log4j日志记录。 我在项目根目录下添加了一个资源文件夹。我在该文件夹中添加了一个log4j.properties文件。我更改了代码以记录某些内容。 告诉IntelliJ在类路径中包含资源文件夹以便可以看到属性文件的正确方法是什么? 使用IntelliJ 8,我可以像喝醉

  • 问题内容: 我创建了一个REST Web服务,在其中创建了config.properties文件来存储和检索整个应用程序中的一些用户名和密码。我将其存储在/src/main/resources/config.properties中。 当我尝试从eclipse的Java代码加载它时,它工作正常。但是当我将它部署在tomcat中时,它没有加载。我用来加载属性文件的代码是 谁能帮我解决这个问题 问题答案

  • 声纳扫描仪-3.1 Java 1.7 此外,该项目是基于Gradle。