我的spring boot应用程序有两个模式,我在Entity类中硬编码如下
@Entity
@Table(name"TABLE_NAME_1", schema="SCHEMA_NAME_1")
public class EntityName1{
...
}
@Entity
@Table(name"TABLE_NAME_2", schema="SCHEMA_NAME_2")
public class EntityName2{
...
}
问题是这个模式名称在每次发布时都会不断更改。因此,每次发布之后,我们都必须来到这里,对实体文件的模式名进行必要的更改。
现在我想我们可以在Spring引导中配置default_schema,但这行不通,因为我们需要外部化两个模式名称。
有什么方法可以这样使用:@Entity@Table(name“Table_name_1”,schema=“{{default.schema_1}}”)公共类EntityName1{…}
@Entity
@Table(name"TABLE_NAME_2", schema="{{default.schema_2}}")
public class EntityName2{
...
}
定义default.schema_1和default.schema_2在外部文件中。
请试试这个。。。
public class SystemProps {
private static Map<String,String> props = null;
public static void loadPropsAll(){
props = new HashMap<>();
File file = null;
try {
file = ResourceUtils.getFile("classpath:application.properties");
loadProps(file,props);
String x = SystemProperties.get("spring.profiles.active");
if(x != null) {
file = ResourceUtils.getFile("classpath:application-" + x + ".properties");
loadProps(file, props);
}
}catch (Exception e){e.printStackTrace();}finally {
}
}
private static void loadProps(File file, Map<String,String> props){
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
while (br.ready()){
String line = br.readLine();
System.out.println(line);
if(!line.startsWith("#") && line.indexOf("=")!=-1){
props.put(""+line.split("=")[0].trim(), line.split("=")[1].trim());
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String getProp(String name){
if(props==null)
loadPropsAll();
return props.get(name);
}
}
public class CustomPhysicalNamingStrategy extends SpringPhysicalNamingStrategy {
@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {
if(name.getText().startsWith("$")){
String x = name.getText().replace("$","").replaceAll("\\{","").replaceAll("}","");
String schema = SystemProps.getProp(x);
return super.toPhysicalSchemaName(new Identifier(schema,name.isQuoted()), jdbcEnvironment);
}
return super.toPhysicalSchemaName(name, jdbcEnvironment);
}
}
spring.jpa.hibernate.naming.physical-strategy=my.package.CustomPhysicalNamingStrategy
my_schema_name_property=SCHEMA_NAME_2
现在你可以用它了
@Entity
@Table(name"TABLE_NAME_1", schema="${my_schema_name_property}")
public class EntityName1{
...
}
我想将@EnableJPARepositories基本包的配置外部化。 我有两个不同的样品包如下 com。项目道博士 我尝试了下面的属性外部化(不适用于多个包) ProjectConfig.class 配置。性质 对于多个包,是否有其他方法将此配置外部化? 谢谢
我知道有很多关于这个的线程,但还没有一个解决我的问题。我有一个在Eclipse中运行的Spring Boot应用程序,我将参数外部化,以便部署到外部Tomcat并使属性远离战争。我将application.properties从src/main/Resources移至APP_ROOT/config。在catalina.sh,我添加了这个: 外部构建工作正常;然而,现在它不再从日食开始。我通过在启动
我希望在运行时传递变量,一旦war文件部署在tomcat上。如何使用classplath中的application.properties以及另一个属性文件ex。abcd.properties位于specific directory.am基本上希望设置额外的类路径,并从该路径中的属性文件中读取值,以及war部署的默认类路径位置。 我使用Spring boot。其中一种方法是将所有属性传递到数据库端,
我构建了一个访问数据库并从中提取数据的Spring-Boot应用程序。一切正常,但我想从外部. Properties文件配置表名。 比如: 我想找点东西,但没找到。 您可以使用注释访问外部属性。 所以我的问题是:有没有办法配置表名?或者我可以更改/拦截hibernate发送的查询吗? 解决方案: 好的,hibernate 5适用于。所以我创建了自己的。 此外,这篇关于NamingStrategy的
问题内容: 这是一个不起作用的简单go程序: 错误: prog.go:18:无效的操作:v [属性](*顶点类型的索引) 我想要的是使用名称访问Vertex X属性。如果我这样做,它会起作用,但不会。 有人可以告诉我如何进行这项工作吗? 问题答案: 大多数代码都不需要这种动态查找。与直接访问相比,它效率低下(编译器知道Vertex结构中X字段的偏移量,可以将vX编译为单个机器指令,而动态查找则需要
我在Tomcat中部署了基于Spring Boot的war文件。我无法使用外部应用程序属性文件。我正在使用follows提供外部属性文件的路径 我也用qoutes试过 这些属性不起作用,spring正在读取绑定在war文件中的属性文件。有谁能帮我一下吗?谢谢