我使用Kafka Server 0.9与消费者kafka-client版本0.9和kafka-producer 0.8.2.
每件事情都很有效,除非我得到很多关于协调员死于消费者的信息
2016-02-25 19:30:45.046 INFO 10263 --- [ cdrServer] o.a.k.c.c.internals.AbstractCoordinator : Marking the coordinator 2147483647 dead.
2016-02-25 19:30:45.048 INFO 10263 --- [ cdrServer] o.a.k.c.c.internals.AbstractCoordinator : Marking the coordinator 2147483647 dead.
2016-02-25 19:30:45.049 INFO 10263 --- [ cdrServer] o.a.k.c.c.internals.AbstractCoordinator : Marking the coordinator 2147483647 dead.
2016-02-25 19:30:45.050 INFO 10263 --- [ cdrServer] o.a.k.c.c.internals.AbstractCoordinator : Marking the coordinator 2147483647 dead.
2016-02-25 19:30:45.051 INFO 10263 --- [ cdrServer] o.a.k.c.c.internals.AbstractCoordinator : Marking the coordinator 2147483647 dead.
2016-02-25 19:30:45.052 INFO 10263 --- …Run Code Online (Sandbox Code Playgroud) 我试图在CRUDRepository上创建一个调用存储过程的方法,我正在尝试一个非常简单的过程.
我在mysql服务器上创建了一个存储过程,如下所示
CREATE DEFINER=`cdrserver`@`192.168.%` PROCEDURE `getCarrier`()
BEGIN
SELECT * FROM `CARRIER`;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
然后在一个实体上
@NamedStoredProcedureQuery(name="getCarrier",procedureName="getCarrier",resultClasses=Carrier.class)
public class Carrier {
Run Code Online (Sandbox Code Playgroud)
在存储库上
@Procedure(name="getCarrier")
List<Carrier> getPCarrier();
Run Code Online (Sandbox Code Playgroud)
但每次我调用这个方法我都会得到以下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Could not locate parameter registered using that position [1]; nested exception is java.lang.IllegalArgumentException: Could not locate parameter registered using that position [1]
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:216)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:111)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy85.getPCarrier(Unknown Source)
at com.teltacworldwide.nocpanel.mvc.DefaultController.cdrgroup(DefaultController.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …Run Code Online (Sandbox Code Playgroud) 我需要向 STOMP 消息添加标头,目前它的工作方式如下,但我正在重新创建消息,是否可以只添加本机标头而不必重新创建消息以提高性能。
public class MyChannelInterceptor extends ChannelInterceptorAdapter {
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
StompCommand command = accessor.getCommand();
if(command != null) {
log.debug("Receiving msg {} from {}",command,accessor.getUser().getName());
if(command == StompCommand.SEND) {
log.debug("Adding expires header to msg {} from {}",command,accessor.getUser().getName());
String ttlString = accessor.getFirstNativeHeader("ttl");
long ttl = 30000;
try {
ttl = Long.parseLong(ttlString);
}
catch(Exception ex) {
log.error("TTL header received but not in correct format {}",ttlString);
}
accessor.addNativeHeader("expires", Long.toString(System.currentTimeMillis() + ttl));
return MessageBuilder.createMessage(message.getPayload(), accessor.getMessageHeaders()); …Run Code Online (Sandbox Code Playgroud) 我希望能够将使用JasperReports生成的报告作为附件发送。目前在我的应用程序中,我可以使用JasperReportsViewResolver查看报告,下面是我的配置
@Bean
public JasperReportsViewResolver getJasperReportsViewResolver() {
JasperReportsViewResolver resolver = new JasperReportsViewResolver();
resolver.setPrefix("classpath:/static/jasper/");
resolver.setSuffix(".jrxml");
resolver.setReportDataKey("datasource");
resolver.setViewNames("rpt_*");
resolver.setViewClass(JasperReportsMultiFormatView.class);
resolver.setOrder(0);
return resolver;
}
Run Code Online (Sandbox Code Playgroud)
我无法从这个 viewresolver 获取输入资源,所以下面是我正在考虑的想法,但我不确定这是最好的方法
JasperDesign jasperDesign = JRXmlLoader.load(getClass().getResourceAsStream("/jasper/rpt_media.jrxml"));
JasperReport report = JasperCompileManager.compileReport(jasperDesign);
JRDataSource reportData = new JREmptyDataSource();
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("reportTitle", "dfa dafdf d dfd");
OutputStream stream = new FileOutputStream(tempfile);
JasperReportsUtils.renderAsPdf(report, parameters, reportData, stream);
Run Code Online (Sandbox Code Playgroud)
将报告保存到随机文件后,我确实阅读了它并作为附件发送。
还有什么建议吗?
我想扩展RepositoryRestExceptionHandler以处理RestController中的错误。
我有验证器,并且在使用RestRepository时工作良好,但是当我使用RestController时,它们却不是,所以我做了如下所示的手动验证
Errors errors = new BeanPropertyBindingResult(NumberRange, "range");
NumberRangeValidator.validate(NumberRange, errors);
if(errors.hasErrors()) {
throw new RepositoryConstraintViolationException(errors);
}
Run Code Online (Sandbox Code Playgroud)
这导致错误500,我想要得到的结果与正文中列出的错误400错误请求相同。
我认为我应该扩展下面的类来处理来自我的剩余控制器的异常
@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class RepositoryRestExceptionHandler { .... }
Run Code Online (Sandbox Code Playgroud)
我试图避免创建与RepositoryRestExceptionHandler完全相同的ControllerAdvice
谢谢
我正在尝试配置两个jpa数据源,我做了同样的例子,每件事都很好,但是可以自动完成自动配置,只需添加一个新的,无需LocalContainerEntityManagerFactoryBean手动创建.
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(false);
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
factoryBean.setPackagesToScan("com.xxxxxxxx.common.domain","com.xxxxxxx.tekram.cdrserver.domain");
return factoryBean;
}
Run Code Online (Sandbox Code Playgroud)