我想要一些属性,可以在Spring bean中通过@Value引用,只能依赖于其他属性来创建。特别是我有一个属性,它描述目录的文件系统位置。
myDir=/path/to/mydir
按照约定,该目录中有一个文件,始终称为 myfile.txt 。
现在,我想通过我的bean内的@Value注释访问目录和文件。有时我想以String形式访问它们,有时以java.io.Files形式访问它们,有时以org.springframework.core.io.FileSystemResource形式访问它们(顺便说一句,开箱即用!)。但是由于这个原因,按需串联字符串不是一个选择。
所以我当然可以只声明两个,但是我最终会得到
myDir=/path/to/mydir
myFile/path/to/mydir/myfile.txt
我想避免这种情况。
所以我想出了一个@Configuration类,该类接受属性并将其添加为新的PropertySource:
@Autowired
private ConfigurableEnvironment environment;
@Value("${myDir}")
private void addCompleteFilenameAsProperty(Path myDir) {
Path absoluteFilePath = myDir.resolve("myfile.txt");
Map<String, Object> props = new HashMap<>();
props.put("myFile, absoluteFilePath.toString());
environment.getPropertySources().addFirst(new MapPropertySource("additional", props));
}
如您所见,在我的上下文中,我什至创建了一个PropertyEditor,它可以转换为 java.nio.file.Path 。
现在的问题是,由于某种原因,它“可以在我的机器上工作”(在我的IDE中),但是不能在预期的目标环境上运行。我到了
java.lang.IllegalArgumentException: Could not resolve placeholder 'myFile' in string value "${myFile}"
春天可以结合属性
myDir=/path/to/mydir
myFile=${myDir}/myfile.txt
您也可以使用默认值,而无需myFile
先在属性中定义:
属性文件
myDir=/path/to/mydir
在班上:
@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;
3.6. 其他特性 在以上章节中未被提及的,关于Spring 2.0的新特性与改进特性,都包含在最后部分。 3.6.1. 动态语言支持 Spring 2.0现在支持用非Java语言编写的bean。当前支持的动态语言包括JRuby,Groovy和BeanShell。标题为 第 25 章 动态语言支持 部分描述了动态语言支持的细节。 3.6.2. JMX Spring对JMX支持的变化更具有进步意义,
6.1. 引用参数 小技巧 所有按引用传递的参数必须加上 const. 定义: 在 C 语言中, 如果函数需要修改变量的值, 参数必须为指针, 如 int foo(int *pval). 在 C++ 中, 函数还可以声明引用参数: int foo(int &val). 优点: 定义引用参数防止出现 (*pval)++ 这样丑陋的代码. 像拷贝构造函数这样的应用也是必需的. 而且更明确, 不接受 N
8.2.1. 属性 8.2.1.1. 属性定义 8.2.1.2. 属性文件及优先级 8.2.1.3. 常用属性介绍 8.2.2. 钩子和模板 8.2.2.1. Git钩子 8.2.2.2. Git模板 8.2.3. 稀疏检出和浅克隆 8.2.3.1. 稀疏检出 8.2.3.2. 浅克隆 8.2.4. 嫁接和替换 8.2.4.1. 提交嫁接 8.2.4.2. 提交替换 8.2.5. Git评注 8.
操作节点 Redisson NodesGroup 对象提供了对 Redis 节点的一些控制: NodesGroup nodesGroup = redisson.getNodesGroup(); nodesGroup.addConnectionListener(new ConnectionListener() { public void onConnect(InetSocketAddress
其它安全特性 除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等。 Docker 当前默认只启用了能力机制。用户可以采用多种方案来加强 Docker 主机的安全,例如: 在内核中启用 GRSEC 和 PAX,这将增加很多编译和运行时的安全检查;通过地址随机化避免恶意探测等。并且,启用该特性不需
问题 我们建立了一个实习生Java spring的框架,我们在两个不同的项目中使用。一个项目使用OracleDB,另一个项目使用MS SQL。 当涉及保留的关键字时,MS SQL正在抱怨。因此我们通过转义来修复列名: 但现在它在oracle db中不再起作用了,因为生成的sql现在包含转义字符: 中选择myEntity.key,myEntity.foo 问题 是否可能根据db方言或某些外部属性,在