考虑 application.properties 的预加载数据的 Spring 数据最佳实践
Posted
技术标签:
【中文标题】考虑 application.properties 的预加载数据的 Spring 数据最佳实践【英文标题】:Spring data best practice for preload data that considers application.properties 【发布时间】:2017-10-28 05:47:39 【问题描述】:在我的 spring Data 项目中,我更喜欢用data.sql
填充一些数据。它们是图像资源、图标和徽标之类的东西。
我的项目有两个application.properties
。一个用于本地开发,另一个用于在具有不同server.adress
的主服务器上发布
我的问题是data.sql
无法从属性中导入变量:
INSERT INTO sticker_table( sticker_type, sticker_img_url , free_sticker) values (1,'http://192.168.34.24:8085/public/ic_avator_boy_1.png',true)
我不能从data.sql
的选定属性中考虑server.address
。我想要 http://192.168.34.24:8085 用于开发服务器和 http://192.168.24.250:8080 用于发布。
那么我如何考虑 data.sql 中的 application.properties 变量,或者有更好的方法在起点填充服务器数据?
【问题讨论】:
如何执行脚本?你不能设置环境变量 DEV/PROD 可以使用 Spring @Value 或其他设置,然后根据变量加载属性文件。使用命名变量在 .sql 文件中,您可以在执行脚本之前替换加载的属性中的值。 @NitinPrabhu 我这样执行:java -jar -Dspring.profiles.active=propertyName application.jar 但无法了解如何在 data.sql 中使用属性变量 【参考方案1】:According to the spring-data-jpa documentation,你可以在你的 spring boot 项目中添加一个data-$platform.sql
。你可以用它来区分你的本地服务器和远程服务器之间的区别data-local.sql
和data-remote.sql
。完成后,您可以控制要加载的文件如下...
java -jar -Dspring.datasource.platform=local application.jar
或
java -jar application.jar --spring.datasource.platform=remote
【讨论】:
这是预加载数据的最佳做法吗?以上是关于考虑 application.properties 的预加载数据的 Spring 数据最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Testcontainers 不使用 application.properties / application.yaml?
Spring Boot系统配置文件application.properties和application.yml
Spring Boot系统配置文件application.properties和application.yml
Spring Boot系统配置文件application.properties和application.yml