小编Tob*_*bia的帖子

JasperReports 5.6:不推荐使用JRXlsExporter.setParameter

我有这个代码将JasperReprot导出到XLS:

        JasperPrint jprint=JasperFillManager.fillReport(expRpg, null, new JRBeanCollectionDataSource(datalist));
        JRXlsExporter exporter = new JRXlsExporter();
        exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jprint); 
        exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, outStream);
        exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
        exporter.exportReport();
Run Code Online (Sandbox Code Playgroud)

升级到JasperReports 5.6所有setParameter都被标记为"已弃用",我找不到适应此代码的文档.

如何使用JasperReports 5.6将报告导出到xls ?

java export jasper-reports deprecated

41
推荐指数
1
解决办法
3万
查看次数

Spring在运行时选择bean实现

我正在使用带有注释的Spring Beans,我需要在运行时选择不同的实现.

@Service
public class MyService {
   public void test(){...}
}
Run Code Online (Sandbox Code Playgroud)

例如对于我需要的Windows平台MyServiceWin extending MyService,对于我需要的linux平台MyServiceLnx extending MyService.

现在我只知道一个可怕的解决方案:

@Service
public class MyService {

    private MyService impl;

   @PostInit
   public void init(){
        if(windows) impl=new MyServiceWin();
        else impl=new MyServiceLnx();
   }

   public void test(){
        impl.test();
   }
}
Run Code Online (Sandbox Code Playgroud)

请考虑我只使用注释而不是XML配置.

java spring spring-bean

40
推荐指数
6
解决办法
3万
查看次数

Spring WebSocket @SendToSession:向特定会话发送消息

是否可以向特定会话发送消息?

我在客户端和Spring servlet之间有一个未经验证的websocket.当异步作业结束时,我需要向特定连接发送未经请求的消息.

@Controller
public class WebsocketTest {


     @Autowired
    public SimpMessageSendingOperations messagingTemplate;

    ExecutorService executor = Executors.newSingleThreadExecutor();

    @MessageMapping("/start")
    public void start(SimpMessageHeaderAccessor accessor) throws Exception {
        String applicantId=accessor.getSessionId();        
        executor.submit(() -> {
            //... slow job
            jobEnd(applicantId);
        });
    }

    public void jobEnd(String sessionId){
        messagingTemplate.convertAndSend("/queue/jobend"); //how to send only to that session?
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在此代码中看到的,客户端可以启动异步作业,当它完成时,它需要结束消息.显然,我只需要向申请人发送信息而不是向所有人广播.有一个@SendToSession注释或messagingTemplate.convertAndSendToSession方法会很棒.

UPDATE

我试过这个:

messagingTemplate.convertAndSend("/queue/jobend", true, Collections.singletonMap(SimpMessageHeaderAccessor.SESSION_ID_HEADER, sessionId));
Run Code Online (Sandbox Code Playgroud)

但这会向所有会话广播,而不仅仅是指定的会话.

更新2

使用convertAndSendToUser()方法进行测试.这个测试是和正式的Spring教程的破解:https://spring.io/guides/gs/messaging-stomp-websocket/

这是服务器代码:

@Controller
public class WebsocketTest {

    @PostConstruct
    public void init(){
        ScheduledExecutorService statusTimerExecutor=Executors.newSingleThreadScheduledExecutor();
        statusTimerExecutor.scheduleAtFixedRate(new Runnable() …
Run Code Online (Sandbox Code Playgroud)

java spring stomp spring-mvc spring-websocket

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

C#事件去抖动

我正在收听硬件事件消息,但我需要去除它以避免太多查询.

这是一个发送机器状态的硬件事件,我必须将其存储在数据库中以用于统计目的,并且有时会发生其状态经常变化(闪烁?).在这种情况下,我想只存储一个"稳定"状态,我想在将状态存储到数据库之前等待1-2秒来实现它.

这是我的代码:

private MachineClass connect()
{
    try
    {
        MachineClass rpc = new MachineClass();
        rpc.RxVARxH += eventRxVARxH;
        return rpc;
    }
    catch (Exception e1)
    {
        log.Error(e1.Message);
        return null;
    }
}

private void eventRxVARxH(MachineClass Machine)
{
    log.Debug("Event fired");
}
Run Code Online (Sandbox Code Playgroud)

我将这种行为称为"去抖动":等待几次才能真正完成其工作:如果在去抖时间内再次触发相同的事件,我必须解除第一个请求并开始等待去抖时间以完成第二个事件.

管理它的最佳选择是什么?只是一次性计时器?

要解释"去抖"功能,请参阅以下关键事件的javascript实现:http: //benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/

c# events debouncing

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

Apache Commons Lang 2 vs 3

在我的应用程序中,我使用的是apache commons Lang v.3.一个需要的图书馆给我一个

java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils
Run Code Online (Sandbox Code Playgroud)

在commmon.lang和commons.lang3之间是否有构建转换,或者我必须添加两个lang库?

java apache jar apache-commons

29
推荐指数
1
解决办法
1万
查看次数

Tomcat CORS过滤器

我想启用tomcat CORS过滤器,我将其添加到web.xml:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我尝试使用自定义过滤器:

<filter>
    <filter-name>SimpleCORSFilter</filter-name>
    <filter-class>com.common.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SimpleCORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

有了这个班级:

public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,你能告诉我为什么吗?我不知道它是否重要但我使用Spring Framework.

java tomcat web-applications cors

27
推荐指数
2
解决办法
5万
查看次数

Spring预计至少有一个bean可以作为此依赖项的autowire候选者

我在这个Autowire上遇到了麻烦:

@Controller
public class ChiusuraController {

    @Autowired
    private ChiusuraProvider chiusuraProvider;
}
Run Code Online (Sandbox Code Playgroud)

用这个bean:

@Service @Transactional
public class ChiusuraProvider extends ThreadProvider {


    public void run() {}
}
Run Code Online (Sandbox Code Playgroud)

延伸

public abstract class ThreadProvider extends Thread implements InitializingBean, Runnable, DisposableBean {
...
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'chiusuraController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cinebot.service.ChiusuraProvider com.cinebot.web.controller.ChiusuraController.chiusuraProvider; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.cinebot.service.ChiusuraProvider] found for dependency: expected at least 1 …
Run Code Online (Sandbox Code Playgroud)

spring dependency-injection autowired

18
推荐指数
2
解决办法
11万
查看次数

外部共享资源(智能卡)的Java并发模式

我有一个Web服务器服务,客户端请求智能卡计算并获得结果.可用的智能卡号可以在服务器正常运行时间内减少或增加,例如我可以从阅读器中物理添加或删除智能卡(或许多其他事件......例如异常等).

在此输入图像描述

智能卡计算可能需要一段时间,因此如果存在对Web服务器的并发请求,我必须优化这些作业以使用所有可用的智能卡.

我想过使用智能卡线程池.至少对我而言,不寻常的是,池应该改变其大小,而不是取决于客户端请求,而只取决于智能卡的可用性.

在此输入图像描述

我研究过很多例子:

  • BlockingQueue:存储请求和停止线程等待某事做的好看.
  • FutureTask:我可以使用这个类让客户端等待它的答案,但是哪种类型的执行器应该完成任务?
  • ThreadPoolExecutor:看起来我需要什么,但有了这个我不能改变池大小,而且每个线程都应该链接到一个智能卡插槽.如果我可以更改池大小(在插入智能卡时添加线程并在移除智能卡时删除线程)以及我是否可以为每个线程分配特定智能卡,这可以是一种解决方案.

这是智能卡控件,每个智能卡有一个SmartcardWrapper,每个智能卡都有自己的插槽号.

public class SmartcardWrapper{

    private int slot;

    public SmartcardWrapper(int slot) {
        this.slot=slot;
    }   

    public byte[] compute(byte[] input) {
        byte[] out=new byte[];
        SmartcardApi.computerInput(slot,input,out); //Native method
        return out;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用每个智能卡一个线程创建一个线程池:

private class SmartcardThread extends Thread{

    protected SmartcardWrapper sw;

    public SmartcardThread(SmartcardWrapper sw){
        this.sw=sw;
    }

    @Override
    public void run() {
        while(true){
            byte[] input=queue.take();
            byte output=sw.compute(input);
            // I have to return back the output to the client
        }           
    }
} …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading smartcard threadpoolexecutor

18
推荐指数
3
解决办法
1291
查看次数

PHP:从本地化格式解析日期

我需要在多语言应用程序中解析日期字符串.每个用户都有自己的语言环境,然后是日期格式.

如何使用:

new DateTime($datestr);
Run Code Online (Sandbox Code Playgroud)

要么

date_parse($datestr);
Run Code Online (Sandbox Code Playgroud)

使用本地化的日期格式?

假设mm/dd/yyyy为EN日期格式,dd/mm/yyyy为IT日期格式,我做了这个测试:

<?php
echo "EN locale<br>\r\n";
setlocale(LC_ALL, 'en_US');
$date="01/02/2015"; //2th Jan
$date_array=date_parse($date);
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']);
$datetime=new DateTime($date);    
echo date("Y-m-d",$mktime);
echo "<br>\r\n";
echo $datetime->format('Y-m-d');
echo "<br>\r\n";

echo "IT locale<br>\r\n";
setlocale(LC_ALL, 'it_IT');
$date="01/02/2015"; //1th Feb
$date_array=date_parse($date);
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']);
$datetime=new DateTime($date);    
echo date("Y-m-d",$mktime);
echo "<br>\r\n";
echo $datetime->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

结果是SAME输出,使用两种语言环境设置,解析以mm/dd/yyyy格式提供.输出始终是2015 - 01 - 02(2月2日)

php parsing localization date

17
推荐指数
1
解决办法
1390
查看次数

C#Stream.Read超时

我有这个streamreader:

            Boolean read = false;
            while (wline!="exit")
            {

                while (!read || streamReader.Peek() >= 0)
                {
                    read = true;
                    Console.Write((char)streamReader.Read());
                }
                wline = Console.ReadLine();
                streamWriter.Write(wline+"\r\n");
                streamWriter.Flush();

            }
Run Code Online (Sandbox Code Playgroud)

如何设置Read()方法的超时?谢谢

c# sockets timeout streamreader

14
推荐指数
2
解决办法
2万
查看次数