小编San*_*r_M的帖子

什么是启动简单的非基于Web的Java应用程序的官方spring引导方式?

我正处于将简单的java项目转换为spring引导变体的过程中.Spring引用参考指南http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/一般都非常有用,但是大多数设置简单配置的例子都涉及一些基于Web的应用程序.来自https://spring.io/guides/gs/spring-boot/教程的入门教程没有提供我正在寻找的答案.

我有一个类HelloSpring需要运行一个方法printHello().为了简单起见,我已经配置了以下类,放在同一个包中:

Application.class

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
Run Code Online (Sandbox Code Playgroud)

HelloConfiguration.class

@Configuration
public class HelloConfiguration {

    @Bean
    public HelloSpring helloSpring(){
        HelloSpring hs = new HelloSpring();
        hs.printHello();
        hs.printHelloAgain();
        return hs;
    }

    @Autowired
    public HelloSpring hs;

}
Run Code Online (Sandbox Code Playgroud)

HelloSpring.class

public class HelloSpring {

    public void printHello() {
        System.out.println("Hello Spring!");
    }

    @PostConstruct
    public void printHelloAgain() {
        System.out.println("Hello Spring?");
    }

}
Run Code Online (Sandbox Code Playgroud)

它打印(省略弹簧记录):

Hello Spring!
Hello Spring?
Hello Spring?
Run Code Online (Sandbox Code Playgroud)

但是,我不确定执行HelloSpring类的正确方法. …

java spring dependency-injection autowired spring-boot

8
推荐指数
2
解决办法
2872
查看次数

Univocity - 如何使用迭代器样式每行返回一个bean?

介绍

我正在构建一个合并几个大型排序的csv文件的进程.我目前正在研究使用Univocity来做到这一点.我设置合并的方法是使用实​​现类似接口的bean.

特定

简化文件如下所示:

id,data
1,aa
2,bb
3,cc
Run Code Online (Sandbox Code Playgroud)

bean看起来像这样(getter和setters ommited):

public class Address implements Comparable<Address> {

    @Parsed
    private int id;
    @Parsed
    private String data;        

    @Override
    public int compareTo(Address o) {
        return Integer.compare(this.getId(), o.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

比较器如下所示:

public class AddressComparator implements Comparator<Address>{

    @Override
    public int compare(Address a, Address b) {
        if (a == null)
            throw new IllegalArgumentException("argument object a cannot be null");
        if (b == null)
            throw new IllegalArgumentException("argument object b cannot be null");
        return Integer.compare(a.getId(), b.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我不想读取内存中的所有数据,我想读取每个文件的顶级记录并执行一些比较逻辑.这是我的简化示例:

public …
Run Code Online (Sandbox Code Playgroud)

java iteration univocity

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

使用Mockito注入autowired bean并在mock上设置一些属性

鉴于以下@Component课程:

@Component
public class MovieFinderImpl implements MovieFinder {

    @Autowired
    private Movie movie;

    @Override
    public List<Movie> findAll() {      
        List<Movie> movies = new ArrayList<>();
        movies.add(movie);
        return movies;
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试学习如何在不进行集成测试的情况下对此示例组件进行单元测试(因此测试类上没有@RunWith(SpringRunner.class)@SpringBootTest注释).

当我的测试类看起来像这样:

public class MovieFinderImplTest {

    @InjectMocks
    private MovieFinderImpl movieFinderImpl;

    @Mock
    public Movie movieMock;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        movieMock.setTitle("test");
        movieMock.setDirector("directorTest");
    }

    @Test
    public void testFindAll() {         
        List<Movie> movies = movieFinderImpl.findAll();
        Assert.assertNotNull(movies.get(0));

        String expectedTitle = "test";
        String actualTitle = movies.get(0).getTitle();
        Assert.assertTrue(String.format("The expected name is %s, but …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing mockito spring-boot

3
推荐指数
2
解决办法
3431
查看次数

如何使用Queue.js和D3.js加载多个文件?

情况

我正在尝试加载多个 xml 文件(位于服务器上),而不需要声明硬编码的文件名。为此,我尝试使用 d3.queue 库https://github.com/d3/d3-queue

我已经实现了 xml 来强制布局满足我自己的需求(https://bl.ocks.org/mbostock/1080941),但是有一个关键缺陷,即我需要手动输入我想要的 xml 文件的名称加载...

复制

给定(来自http://learnjsdata.com/read_data.html的调整示例):

queue()
  .defer(d3.xml, "/mappings/Customer.hbm.xml")
  .defer(d3.xml, "/mappings/Actor.hbm.xml")
  .await(analyze);

function analyze(error, Customer, Actor) {
  if(error) { console.log(error); }
  // do stuff with Customer data, do stuff with Actor data
}
Run Code Online (Sandbox Code Playgroud)

并给出我对 xml 处理的实现:

d3.xml("mappings/Customer.hbm.xml","application/xml", function(error,xml){
    if (error) throw error;
    // do stuff with the data retrieved from Customer.hbm.xml
});
Run Code Online (Sandbox Code Playgroud)

问题

如何组合以上两个片段,以便不必编写 xml 硬编码的位置并将所有参数传递给分析函数?任何朝着正确方向的推动将不胜感激。

在 psuedocode 中,我尝试编写如下代码(但我无法让它工作):

  1. 函数从映射文件夹中获取 xml 的所有名称(可能使用 node.js fs.readdir 或 fs.readdirSync 方法,但我不确定它是如何工作的) …

javascript xml queue d3.js

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

Spring Batch-循环读取器/处理器/写入器步骤

回答

根据可接受的答案代码,对该代码进行以下调整对我有用:

// helper method to create a split flow out of a List of steps
private static Flow createParallelFlow(List<Step> steps) {
    SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
    taskExecutor.setConcurrencyLimit(steps.size());         

    Flow[] flows = new Flow[steps.size()];
    for (int i = 0; i < steps.size(); i++) {
        flows[i] = new FlowBuilder<SimpleFlow>(steps.get(i).getName()).start(steps.get(i)).build();
    }           

    return new FlowBuilder<SimpleFlow>("parallelStepsFlow")
        .split(taskExecutor)                
        .add(flows)
        .build();
}
Run Code Online (Sandbox Code Playgroud)

编辑

我已经将问题更新为可以正确循环的版本,但是随着应用程序的扩展,能够并行处理很重要,而且我仍然不知道如何在运行时动态地使用javaconfig来实现这一点...

改进的问题:如何在运行时针对5种不同情况动态创建读取器-处理器-写入器(5个查询意味着按现在配置的5个循环)?

我的LoopDecider看起来像这样:

public class LoopDecider implements JobExecutionDecider {

    private static final Logger LOG = LoggerFactory.getLogger(LoopDecider.class);
    private static final String …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch spring-java-config

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