小编Mar*_*zer的帖子

@Value未通过Java配置的测试上下文设置

我有一个使用Java配置的Spring(@Configuration等)的Maven项目.引用的属性@Value存储在不同的位置,例如Tomcat的context.xml.

For testing I've created a .properties file to provide some values for the components and services. In my JUnit test (which uses a spring test context) this .properties file is added via @PropertySource. The problem is that the values will not be loaded from the file, instead the value identifier is set as value, e.g. ${someFlag:false} (so I get ClassCastExceptions for any other than String). Also the default value will not be set, so …

java testing junit spring properties

14
推荐指数
1
解决办法
2万
查看次数

RichFaces tabPanel,带有switchType ajax和a4j:status

我试图实现的目标

我有一个rich:tabPanelswitchType="client",其中一个标签设置了它switchType,ajax因为加载它的数据是一个昂贵的操作.当我单击此Ajax选项卡时,我希望将其标题更改为正在加载...以指示已识别出单击.加载完成后,标题应切换回Ajax Tab.

[Client Tab] [Ajax Tab]
<click on 'Ajax Tab'>
[Client Tab] [Loading...]
<wait...>
[Client Tab] [Ajax Tab]
<click on 'Client Tab'>
[Client Tab] [Ajax Tab]
Run Code Online (Sandbox Code Playgroud)

问题描述

其实,大多数的上述预期作品所描述的,我唯一的问题是,当我从导航阿贾克斯选项卡到任何其他选项卡,将标题阿贾克斯Tab键切换回载入中...:

[Client Tab] [Ajax Tab]
<click on 'Ajax Tab'>
[Client Tab] [Loading...]
<wait...>
[Client Tab] [Ajax Tab]
<click on 'Client Tab'>
[Client Tab] [Loading...]
Run Code Online (Sandbox Code Playgroud)

研究

我在RichFaces的JIRA中发现了一个问题,但是从版本3.2.1开始修复了这个问题.此外,我用谷歌搜索了几个小时,但未能找到任何类似的问题.

环境

  • Tomcat 7.0.30
  • Mojarra …

richfaces ajax4jsf jsf-2

7
推荐指数
1
解决办法
5325
查看次数

在Spring Boot测试期间替换@Configuration中的@Value属性

脚本

我有一个Spring Boot应用程序,带有带@Configuration注释的Spring配置类,其中包含一些带@Value注释的字段.对于测试,我想用自定义测试值替换这些字段值.

不幸的是,这些测试值不能使用简单的属性文件,(String)常量或类似方法覆盖,而是必须使用一些自定义编写的属性来解析Java类(例如TargetProperties.getProperty("some.username")).

我的问题是,当我添加自定义PropertySourceConfigurableEnvironment我的测试配置中,它已经为时已晚,因为这PropertySource将被添加之后的如RestTemplate已创建.

我如何可以覆盖@Value注解领域一个@Configuration与获得性类编程通过自定义的Java代码之前,什么都被初始化?

生产配置类

@Configuration
public class SomeConfiguration {

    @Value("${some.username}")
    private String someUsername;

    @Value("${some.password}")
    private String somePassword;

    @Bean
    public RestTemplate someRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        restTemplate.getInterceptors().add(
            new BasicAuthorizationInterceptor(someUsername, somePassword));

        return restTemplate;
    }

}
Run Code Online (Sandbox Code Playgroud)

测试配置类

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class SomeTest {

    @SpringBootConfiguration
    @Import({MySpringBootApp.class, SomeConfiguration.class}) …
Run Code Online (Sandbox Code Playgroud)

testing spring-boot

7
推荐指数
3
解决办法
1万
查看次数

JavaEE中的配置管理

我的目标

我有一个JavaEE环境(在我的特定情况下它是一个Glassfish Web配置文件),我想要一种独立于容器的方式来配置我的应用程序,具有以下功能:

  1. 没有指定其他内容时的默认配置(在WAR文件中)
  2. 自定义配置(WAR文件外)有两层:
    • 主机特定设置(在外部属性文件中;例如某些工作目录)
    • 应用程序特定设置(在数据库中;例如邮箱大小)

我希望尽可能少的前置条件(现在唯一一个是JNDI数据源)来部署和运行我的应用程序(设置JNDI数据源,部署WAR文件,在某些配置文件夹中有一个可选的.properties文件,并且 - 完成).

这引出了我的第一个问题:这是一个常见的/好的/有用的设置还是不必要的复杂和/或非常奇特?

我的想法(到目前为止)

默认配置

默认配置将位于属性文件中:

src/main/resources/config/default.properties

应用范围的描述豆读取初始化这个特性在这里:

@Named
@ApplicationScoped
public class Configuration implements Serializable {

    ...

    @PostConstruct
    public void initConfiguration() {
        loadDefaultConfiguration();
    }

    private void loadDefaultConfiguration() {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

        try (InputStream input = classLoader.getResourceAsStream("/config/default.properties")) {
            properties.load(input);
        } catch(IOException ex) {
            LOGGER.error(...);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

应用特定设置

这些设置将存储在具有键和值列的数据库表中.它们将始终通过EntityManager访问,希望JPA实现的缓存将是聪明的:).这里的优点是,在应用程序运行时可以轻松更改这些设置.

@Named
@ApplicationScoped
public class Configuration implements Serializable {

    ...

    public T getProperty(final PropertyKeyEnum key, final Class<T> type) {
        if (key.getSource() == …
Run Code Online (Sandbox Code Playgroud)

java configuration properties java-ee-6 glassfish-3

6
推荐指数
1
解决办法
2221
查看次数

当变量具有默认值时,Ansible 剧本条件失败

给定以下剧本 ( deployment.yml):

---
- name: Debug
  hosts: applicationservers
  tasks:
  - debug: msg="{{add_host_entries | default('false')}}"
  - debug: msg="{{add_host_entries | default('false') == 'true'}}"
  - debug: msg="Add host entries = {{add_host_entries | default('false') == 'true'}}"

- include: add_host_entries.yml
  when: add_host_entries | default('false') == 'true'
Run Code Online (Sandbox Code Playgroud)

add_host_entries.yml即使上述所有调试消息都打印某种类型的内容,要包含的条件总是失败true(我知道在第一个调试消息中它是字符串,而其他两个结果是布尔值)。

当我省略默认值部分时,add_host_entries.yml将执行:

  when: add_host_entries
Run Code Online (Sandbox Code Playgroud)

不过,我需要这个默认值行为,因为它是一个可选值,仅在某些阶段设置。

其他尝试(未成功)

括号

  when: (add_host_entries | default('false')) == 'true'
Run Code Online (Sandbox Code Playgroud)

转换为布尔值

  when: add_host_entries|default('false')|bool
Run Code Online (Sandbox Code Playgroud)

其他来源和信息

以下是重现问题所需的所有资源。

add_host_entries.yml

---
- name: add_host_entries
  hosts: applicationservers
  gather_facts: false
  tasks:
    - debug: msg="Add Host …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-2.x

5
推荐指数
1
解决办法
1万
查看次数

具有多个输出主题的 Kafka 流拓扑的并发性

给定一个将消息发布到两个不同主题的 Kafka 流拓扑,是否可以保证在这两个分支中执行各个步骤的顺序,或者这些分支是否完全分离并并行执行?

例子

    KStream<..., ...> filteredStream = builder.stream("input-topic", ...).filter(...)...;

    filteredStream.mapValues(this::mapOne).to("output-topic-one", ...);
    filteredStream.flatMap(this::mapTwo).to("output-topic-two", ...);
Run Code Online (Sandbox Code Playgroud)

在此示例中,是否会在调用或消息mapOne发布到输出主题之前 执行并mapTwo发布到输出主题?换句话说,是否能保证在消息发布到output-topic- 2之前mapOne完成?

拓扑可视化

当查看拓扑描述的可视化时(参见底部;使用https://zz85.github.io/kafka-streams-viz/制作),您可以看到两个分支。但您还可以在每个气泡中看到这些数字,这也可能表明存在执行顺序(1-4,然后 5-6-7,然后 8-9)。

kafka流拓扑

拓扑描述

Topologies:
   Sub-topology: 0
    Source: KSTREAM-SOURCE-0000000000 (topics: [input-topic])
      --> KSTREAM-FILTER-0000000001
    Processor: KSTREAM-FILTER-0000000001 (stores: [])
      --> KSTREAM-FILTER-0000000002
      <-- KSTREAM-SOURCE-0000000000
    Processor: KSTREAM-FILTER-0000000002 (stores: [])
      --> KSTREAM-MAP-0000000003
      <-- KSTREAM-FILTER-0000000001
    Processor: KSTREAM-MAP-0000000003 (stores: [])
      --> KSTREAM-FILTER-0000000004
      <-- KSTREAM-FILTER-0000000002
    Processor: KSTREAM-FILTER-0000000004 (stores: [])
      --> KSTREAM-MAPVALUES-0000000005, KSTREAM-FLATMAP-0000000008
      <-- KSTREAM-MAP-0000000003 …
Run Code Online (Sandbox Code Playgroud)

apache-kafka apache-kafka-streams

5
推荐指数
1
解决办法
924
查看次数

角色的默认变量中的Ansible递归循环

如何在不引起递归循环的情况下在Ansible(2.1.x)中的其他变量中重用变量?

设定

考虑以下roles/<role>/defaults/main.yml文件:

---
liquibase:
  version: "3.5.3"
  download_file: "liquibase-{{liquibase.version}}-bin.tar.gz"

  # I also tried this alternative with a similar result:
  # download_file: "liquibase-{{liquibase[version]}}-bin.tar.gz
...
Run Code Online (Sandbox Code Playgroud)

和这个roles/<role>/tasks/main.yml文件:

---
- name: Liquibase | Download
  debug:
    msg: "download_file: {{liquibase.download_file}}"
...
Run Code Online (Sandbox Code Playgroud)

错误

我希望变量liquibase.download_file具有值,liquibase-3.5.3-bin.tar.gz但是当我使用此角色运行剧本时,出现以下错误:

...
TASK [liquibase : Liquibase | Download] *******************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "...: recursive loop detected in template string: liquibase-{{liquibase.version}}-bin.tar.gz"}
...
Run Code Online (Sandbox Code Playgroud)

我的用例

显然,我要下载Liquibase,并且要让角色的用户决定要使用哪个版本。我还想提供完全覆盖下载位置(文件,URL等)的可能性,例如,使用公司的FTP服务器或类似服务器。

variables ansible

4
推荐指数
1
解决办法
2514
查看次数