我想要一个像我公司一样的套餐。bindy中的几个类都用bindy注释注释。然后,我希望有Camel路由可以将CSV解组为其中一种类型。我已经完成了所有工作,但如果包中有多个bindy注释类,则解组失败。这是因为Bindy试图将CSV行解组到包中的每个类中。并且一个特定的行不能正确地编组到多个类中。我的数据格式在Spring中声明如下:
<bean class="org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat">
<property name="packages" value="my.company.bindy"/>
</bean>
我使用JavaDSL遇到了同样的问题。我有两个用Bindy注释的类,“错误”的类正在被实例化。
在这种情况下,解决方案是完全限定我绑定到的包名称
例如
from("file:myfile.csv").
unmarshall().
bindy(BindyType.Csv, com.company.domain.OrderLine.class).
to("seda:output")
而不是
from("file:myfile.csv").
unmarshall().
bindy(BindyType.Csv, OrderLine.class).
to("seda:output")
我的解决方案是如下扩展BindyCsvDataFormat:
/**
* This class changes the behavior of BindyCsvDataFormat. Instead of detecting classes
* in package(s) which are annotated with bindy annotations, this class, specifically
* defines the class that will be unmarshalled into.
*/
public class SingleClassBindyCsvDataFormat extends BindyCsvDataFormat {
private Class<?> modelClass;
@Override
protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
return new OneClassBindyCsvFactory(resolver, getModelClass());
}
@Override
public void setPackages(String... packages) {
throw new UnsupportedOperationException("This dataformat does not support package based model searches.");
}
public Class<?> getModelClass() {
return modelClass;
}
public void setModelClass(Class<?> modelClass) {
this.modelClass = modelClass;
}
private static class OneClassBindyCsvFactory extends BindyCsvFactory {
public OneClassBindyCsvFactory(PackageScanClassResolver resolver, Class<?> modelClass) throws Exception {
super(resolver, new String[]{});
Preconditions.checkNotNull(modelClass);
models = ImmutableSet.<Class<?>>of(modelClass);
initCsvModel();
}
}
}
到目前为止,它就像一个魅力!
此问题已在 Camel 2.16.0 中修复。
从http://camel.apache.org/bindy.html
“如果你使用多个模型,每个模型都必须放在它自己的包中,以防止不可预测的结果。
从Camel 2.16开始,情况不再如此,因为您可以在同一个包中安全地拥有多个模型,因为您现在使用类名而不是包名来配置bindy。”
如果不是这样,请给我一个简单的例子。
大多数或所有核心hibernate配置属性都可以在启动属性文件中指定,以替代在hibernate.cfg.xml中指定映射。
是否允许在一个方法中使用多个@scheduled注释?
我有多个方法,我希望有静态锁定,以便没有两个对象可以访问一个方法,但同时不同的方法不会被这些对象锁定,并且可以独立运行。 现在我希望这两个方法在被锁定时相互独立,但同时我希望同一个类的多个实例被锁定在一个方法上。 如何实现这一点?通过使用不同的类。仅仅这样做能达到目的吗?
关于这个主题有几个问题,但我找不到一个与Groovy“AST”注释有关的问题。从表面上看,这不仅方便,而且根据日志级别给你有条件的执行。 在我的书Groovy in Action中,它说: 将Slf4j记录器作为静态最终组织注入。slf4j。将日志记录到类中,并使用org对其进行初始化。slf4j。伐木厂。getLogger(类)。LogBack框架使用SLF4J作为底层记录器,因此LogBack
关于这个主题有几个问题,但我找不到一个与Groovy“ast”注释有关的问题。从表面上看,这不仅方便,而且可以根据日志级别有条件地执行内容。 在我的书《Groovy In Action》中,它说: 将Slf4j记录器作为静态最终org.Slf4j.logger注入到类中,并使用org.Slf4j.loggerFactory.getLogger(类)初始化它。LogBack框架使用SLF4J作为底层