【发布时间】:2022-01-25 11:03:18
【问题描述】:
我正在使用 Spring Boot 2.5.4。我已经编写了 Web 应用程序。现在我面临 application.properties 文件变量的问题。如果我正在更改现有值,则在代码中读取旧值,新定义的对象不会出现。
找到下面的 application.properties 文件
spring.datasource.url=jdbc:mysql://XXXXXXXXXXX:3306/test
spring.datasource.username=user
spring.datasource.password=XXXXXXXXXXXXXXXX
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
# Config Variables
ml.url=https://google.com/ml/entities
main.url=https://xxxx.com/staging/mainfile
和应用程序配置java文件
@Component
public class ApplicationConfig {
@Value("${ml.url}")
public String mlurl;
@Value("${main.url}")
public String mainurl;
@PostConstruct
public void initThat(){
that = this;
}
}
在代码中读取变量为
@RequestMapping("/readfile")
@RestController
public class AppointmentResource {
private static Logger S_LOGGER = LogManager.getLogger( AppointmentResource.class );
@Autowired
private ApplicationConfig applicationConfig;
@GetMapping(value = "/websiteUrl",produces = MediaType.APPLICATION_JSON_VALUE)
public String getProduct() {
String websiteUrl = applicationConfig.mlurl;
S_LOGGER.info("website url is " + websiteUrl);
return websiteUrl;
}
}
编译了几次。然后我将 ml.url 更改为 https://google.com/prod/entities/test
但在代码中我仍然得到https://google.com/ml/entities。
任何人都可以帮助从 application.properties 获取最新更改
我在这里感到震惊。帮助
【问题讨论】:
-
1)
application.properties中的更改需要重新部署/重新启动 Spring 应用程序,仅重新编译它是不够的。 2) 如果您从浏览器访问您的 API/websiteUrl,那么它可能会缓存响应并且实际上甚至不会命中端点。尝试将一些令牌添加到浏览器 URL/websiteUrl?101010以防止缓存 -
@NikolaiShevchenko:是的,我通过 (mvn clean install) 重新部署了 jar,但它没有从 application.properties 获得最新值。
-
mvn clean install本身不会导致重新部署。它只编译 jar 并将其放入 Maven 存储库 -
@NikolaiShevchenko:如果我错了,请纠正我。根据我的理解,在 pom.xml 中正常添加 spring-boot-devtools 将重新编译。如果没有,请建议如何做。
-
忽略我的最后评论,因为您在原始问题中没有提到 spring-boot-devtools
标签: spring-boot spring-mvc java-11