我按照http://spring.io/guides/gs/batch-processing/上的指南进行了操作,但它描述了一个没有可配置参数的作业.我正在使用Maven来构建我的项目.
我正在移植我在XML中定义的现有作业,并希望通过命令传入jobParameters.
我尝试了以下方法:
@Configuration
@EnableBatchProcessing
public class MyBatchConfiguration {
// other beans ommited
@Bean
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
return new FileSystemResource(dest);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用以下方法编译项目:
mvn clean package
Run Code Online (Sandbox Code Playgroud)
然后我尝试启动这样的程序:
java my-jarfile.jar dest=/tmp/foo
Run Code Online (Sandbox Code Playgroud)
我得到一个例外说:
[...]
Caused by: org.springframework.expression.spel.SpelEvaluationException:
EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of
type 'org.springframework.beans.factory.config.BeanExpressionContext'
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我正在创建我的第一个grails插件,我不知道应该在哪里配置日志记录.
在普通的grails应用程序中,有一个conf/Config.groovy文件,但对于插件没有.
还有另一种方法来实现这一目标吗?
我想在启动插件单元和集成测试时看到调试消息......
提前致谢.
菲利普
是否有任何java(> 5)枚举用于在某个地方列出欧洲国家和语言?如果没有,我可能会从这个列表中写出来:http://www.nationsonline.org/oneworld/european_languages.htm
但如果我能避免这种负担,那就太好了!
PS:最后,我开始在geonames.org上使用geoNames webservice.对于我在Groovy中使用此代码段的国家/地区:
import org.geonames.*
ToponymSearchCriteria sc = new ToponymSearchCriteria()
sc.setContinentCode("eu")
sc.setFeatureCode("PCLI")
def res = WebService.search(sc)
def countries = res.getToponyms().collect{it.countryName}.sort()
Run Code Online (Sandbox Code Playgroud) 我有以下JSON:
{
fields : {
"foo" : "foovalue",
"bar" : "barvalue"
}
}
Run Code Online (Sandbox Code Playgroud)
我写了一个pojo如下:
public class MyPojo {
@JsonProperty("fields")
private List<Field> fields;
static class Field {
@JsonProperty("foo") private String foo;
@JsonProperty("bar") private String bar;
//Getters and setters for those 2
}
Run Code Online (Sandbox Code Playgroud)
这显然会失败,因为我的json字段"fields"是一个hashmap,而不是一个列表.
我的问题是:是否有任何"魔术"注释可以使杰克逊将地图键识别为pojo属性名称,并将地图值分配给pojo属性值?
PS:我真的不想让我的田野对象......
private Map<String, String> fields;
Run Code Online (Sandbox Code Playgroud)
...因为在我的真实世界json中,我在地图值中有复杂的对象,而不仅仅是字符串......
谢谢 ;-)
菲利普
我在 Spring Batch 项目的 beans 定义文件中配置了以下编写器:
<bean id="writer" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="file:/path/to/somefile"/>
<property name="lineAggregator">
<bean class="MyCustomLineAggregator"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
现在,我不想写入 /path/to/somefile,而是希望将输出发送到 stdout,原因是我想通过命令行启动器启动此作业,并将输出通过管道传输到另一个 unix 程序。
我尝试将资源属性设置为“file:/dev/stdout”,但随后出现异常: org.springframework.batch.item.ItemStreamException: Unable to create file: [/dev/stdout]
我试图看看是否有一个开箱即用的资源可以处理这个问题,但我有点不知道哪个资源可以完成这项工作......
感谢您的帮助。
编辑:以下是我根据您的建议提出的解决方案:
import java.util.List;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.transform.LineAggregator;
public class StdoutWriter<T> implements ItemWriter<T> {
LineAggregator<T> lineAggregator;
public void setLineAggregator(LineAggregator<T> lineAggregator) {
this.lineAggregator = lineAggregator;
}
@Override
public void write(List<? extends T> items) throws Exception {
for (T item : items) {
System.out.println(lineAggregator.aggregate(item));
}
}
}
Run Code Online (Sandbox Code Playgroud) 在我目前的grails应用程序中,我在resources.groovy中定义了spring bean.现在我还有一个已经定义了一堆bean的xml文件,我想按原样使用它们,而不是重新创建bean dsl中的每个bean.
这有可能吗?grails bean dsl中是否有等效的xml导入标记?我想在applicationContext.xml中添加import ...但是我不确定它是否适合这样做.
提前致谢,
菲利普
我正在遗留数据库上创建一个grails应用程序.
有一个表格,我想创建几个不同的域对象(在我的例子中,Type1,Type2和Type3).
表格是这样的:
ID TYPE DESCRIPTION
1 type1 description of a type1 object
2 type1 description of another type1 object
3 type2 description of a type2 object
4 type3 description of a type3 object
...
Run Code Online (Sandbox Code Playgroud)
所以我想创建3个不同的域类,每个类包含一个名为"description"的字段,并且对应于特定的"类型",因为行代表不同的概念.
是否有任何类型的约束允许我按类型过滤行?
我的意思是,我可以这样做:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
Run Code Online (Sandbox Code Playgroud)
然后我希望Type1.list()生成如下查询:
SELECT type, description
FROM mytable
WHERE type = 'type1'
Run Code Online (Sandbox Code Playgroud)
更新:
实际上 …
我正在使用Spring Batch 2.1.6.RELEASE开始一个新项目,我使用Maven进行依赖管理.
默认情况下,它导入spring framework 2.5.6,但我想改用3.0.5.RELEASE.
这篇文章说它兼容,但我不知道如何在我的maven pom文件中声明它.
我尝试将spring-core,spring-beans和spring-context版本3.0.5.RELEASE的依赖项放在一起,但是在不删除2.5.6版本的情况下将库添加到项目中.
我看一下spring-batch-parent pom文件,有一个名为"spring3"的配置文件,它使用我想要的spring版本.如何在项目的pom文件中激活配置文件?
提前致谢,
菲利普
我想在Burt的例子中创建使用JdbcStore的石英作业,如文档的聚类部分所述.
该示例显示了如何使用quartz.properties文件配置quartz.
现在,我希望我的jdbc存储与我的grails应用程序是同一个数据库,这样我就可以复制更少的设置了.
那么,假设我在我的数据库中手动创建了所需的表,是否可以使用在石英插件中使用Datasource.groovy中配置的默认dataSource?
我使用的是grails 2.4.4和quartz 1.0.2.
换句话说,我可以将我的设置添加到QuartzConfig.groovy而不是创建一个新的quartz.properties文件吗?至少我可以从单独的环境设置中受益.
这样的东西在QuartzConfig.groovy中是否有效?
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
exposeSchedulerInRepository = true
props {
scheduler.skipUpdateCheck = true
threadPool.class = 'org.quartz.simpl.SimpleThreadPool'
threadPool.threadCount = 50
threadPool.threadPriority = 9
jobStore.misfireThreshold = 60000
jobStore.class = 'impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = false
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 5000
plugin.shutdownhook.class = 'org.quartz.plugins.management.ShutdownHookPlugin'
plugin.shutdownhook.cleanShutdown = true
jobStore.dataSource = 'myDS'
// [...]
}
Run Code Online (Sandbox Code Playgroud) 以下Groovy代码段给我带来了奇怪的结果:
def s = "123456"
assert s.split("").size() == s.size()
Run Code Online (Sandbox Code Playgroud)
结果是 :
Assertion failed:
assert s.split("").size() == s.size()
| | | | | |
| | 7 | | 6
| | | 123456
| | false
| [, 1, 2, 3, 4, 5, 6]
123456
Run Code Online (Sandbox Code Playgroud)
我是否在split()方法行为中遗漏了一些东西,或者这是一个真正的错误?