我正处于将简单的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类的正确方法. …
我正在构建一个合并几个大型排序的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) 鉴于以下@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) 我正在尝试加载多个 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 中,我尝试编写如下代码(但我无法让它工作):
根据可接受的答案代码,对该代码进行以下调整对我有用:
// 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 ×4
spring ×3
spring-boot ×2
autowired ×1
d3.js ×1
iteration ×1
javascript ×1
mockito ×1
queue ×1
spring-batch ×1
unit-testing ×1
univocity ×1
xml ×1