spring.messages.basename 如果jar包启动项目 如何改为外部文件
时间: 2024-04-15 08:29:49 浏览: 148
要将 `spring.messages.basename` 的配置从 jar 包中移动到外部文件中,你可以使用 Spring Boot 提供的外部化配置功能。
首先,创建一个外部的属性文件,例如 `application.properties`,并将需要外部化的配置项添加到该文件中。对于 `spring.messages.basename` 属性,你可以在该文件中添加以下内容:
```
spring.messages.basename=your-external-messages-file
```
接下来,将该外部的属性文件放置在项目的某个位置,例如项目根目录或指定的配置目录。
最后,通过命令行参数、环境变量或其他配置方式,指定应用程序加载外部属性文件的位置。例如,如果你将属性文件放置在项目根目录下,并命名为 `application.properties`,可以使用以下命令行参数启动应用程序:
```
java -jar your-application.jar --spring.config.name=application --spring.config.location=file:/path/to/your-application.properties
```
这样,应用程序将会加载指定位置的外部属性文件,并使用其中的配置值。
请注意,在将配置外部化时,考虑安全性和合理性,确保外部属性文件的访问权限受到限制,并根据实际需求选择合适的方式进行配置。
相关问题
项目是jar包启动。如何配置spring.messages.basename国际化文件 引用外部文件
如果你想在以 JAR 包形式启动的项目中配置 `spring.messages.basename` 属性来引用外部的国际化文件,可以按照以下步骤进行操作:
1. 首先,将你的国际化文件(例如 `messages.properties`)放置在一个外部目录中,可以是项目的根目录或者指定的配置目录。
2. 创建一个新的配置文件(例如 `application.properties`),将 `spring.messages.basename` 属性设置为你的国际化文件的路径和基本名称。例如:
```properties
spring.messages.basename=file:/path/to/your-external-folder/messages
```
这里的 `/path/to/your-external-folder/` 是你放置国际化文件的外部目录的路径。
3. 确保将该 `application.properties` 文件与 JAR 包放置在同一目录下。
4. 使用以下命令启动你的 JAR 包:
```shell
java -jar your-application.jar --spring.config.name=application --spring.config.location=file:/path/to/your-application.properties
```
这样,Spring Boot 将会加载外部的 `application.properties` 文件,其中包含了 `spring.messages.basename` 的配置。
这样配置后,Spring Boot 将会根据 `spring.messages.basename` 属性指定的路径去查找国际化文件。请确保国际化文件的路径和基本名称与配置一致,并且具有正确的访问权限。
希望这些步骤对你有所帮助!如有任何疑问,请随时提问。
spring.messages.basename 怎么模糊匹配对应路径下的文件
在 Spring Boot 中,如果需要在指定路径下模糊匹配对应的国际化资源文件,可以通过在 `spring.messages.basename` 属性中使用 `classpath*:` 前缀来实现。例如,可以将 `spring.messages.basename` 属性设置为 `classpath*:i18n/messages_*`,表示加载 classpath 下 i18n 文件夹下所有以 `messages_` 开头的资源文件,如 `messages_en.properties`、`messages_zh.properties` 等。
需要注意的是,在使用 `classpath*:` 前缀时,不仅会在 classpath 中查找资源文件,还会在所有 jar 包中查找资源文件。因此,如果存在多个 jar 包中都有相同的资源文件,就可能会导致加载冲突的问题。
同时,还可以通过在 MessageSource 中配置 `setUseCodeAsDefaultMessage(true)` 来开启模糊匹配。这样,当找不到对应的消息时,就会使用消息代码作为默认消息。例如,在 `messages_en.properties` 中,定义了一个消息 `hello.world=Hello, World!`,在 `messages_zh.properties` 中,没有定义这个消息,但是定义了一个消息 `hello=你好`。当我们使用 `Locale.ENGLISH` 时,在 `messages_zh.properties` 中就找不到 `hello.world` 对应的消息,此时会使用 `hello.world` 作为默认消息。代码如下:
```java
@Autowired
private MessageSource messageSource;
public String getMessage(String code, Object... args) {
return messageSource.getMessage(code, args, code, LocaleContextHolder.getLocale());
}
```
在上面的代码中,当找不到对应的消息时,使用 `code` 作为默认消息。
需要注意的是,使用模糊匹配时,要确保所有的资源文件都遵循相同的命名规则,否则会出现加载不到资源文件的情况。
阅读全文