在我的spring项目中,我在classpath中有一个名为database.properties的文件,其中包含以下内容:
jdbc.Classname=org.postgresql.Driver
jdbc.url=
jdbc.user=
jdbc.pass=
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=validate
我的一个服务类中有一个方法,我通过hibernate手动将数据库模式导出到服务器。此时此方法的代码如下:
public void create_tables(String maquina, String usuario, String senha) {
Configuration config = new Configuration();
SchemaExport schema = new SchemaExport(config);
schema.create(true, true);
}
我想从配置变量中的文件database.properties加载属性,设置我传递给此变量中的方法的值(url,user和pass),并将此新配置保存在同一个文件中。
任何人都可以指明这样做的方向吗?
答案 0 :(得分:1)
这样做吗?
Properties props = new Properties();
FileInputStream fis = new FileInputStream( "database.properties" );
props.load( fis );
fis.close();
props.setProperty("jdbc.url", {{urlvalue}} );
props.setProperty("jdbc.user", {{user value}} );
props.setProperty("jdbc.pass", {{pass value}} );
FileOutputStream fos = new FileOutputStream( "database.properties" );
props.store( fos );
fos.close();
答案 1 :(得分:1)
我的classpath中有一个名为database.properties
的文件我想从配置变量中的文件database.properties加载属性,设置我传递给此变量中的方法的值(url,user和pass),并将此新配置保存在同一个文件中。
这至少是困难的,也许是不可能的。
"文件"您尝试更新可能根本不是文件。它可能是较大的JAR或ZIP文件的组件。它可能是已下载的内容或磁盘上的缓存。它可能(假设地)使用公钥/私钥进行加密......我们没有加密"加密"键。
除了困难之外,这是一个坏主意。假设您的服务部署为WAR文件,并且属性文件在WAR中传递。您可以修改属性......等等。然后,由于某种原因,您重新部署WAR。这将覆盖您的配置。
如果希望配置属性可更新,则它们不应位于类路径中。将文件放在一个单独的目录中(在webapp树之外...),并通过文件路径名或file:
URL访问它。
我尝试删除classpath:,但是我遇到错误引起:java.io.FileNotFoundException:类路径资源[database.properties]无法打开,因为它不存在
看起来您正在使用属性文件的(不正确的)相对路径。
将文件复制到(例如)" /tmp/database.properties" ;,将注释更改为
@PropertySource("/tmp/database.properties")
看看是否有效。如果是,那么您可以找出一个更合适的位置来存储文件。但正如我上面所说,如果您尝试更新webapp目录中的文件,那么重新部署时很可能会被破坏。所以不要把它放在那里。
答案 2 :(得分:1)
示例从文件加载道具。 我们有一个带有filename = conf.props 的测试配置文件 包含:
key0=value0
key1=value1
应用程序中的下一个类加载属性:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class LogProcessor {
public void start(String fileName ) throws IOException {
Properties prop = new Properties();
FileInputStream fis = new FileInputStream(fileName);
prop.load(fis);
System.out.println (prop.getProperty("key0"));
}
}
如何运行:
public static void main(String[] args) {
try {
new LogProcessor().start();
} catch (IOException e) {
e.printStackTrace();
}
返回 value0
\ | / 73