小编Bar*_*rge的帖子

Springfox @RestController命名

我使用Springfox遇到了一些小麻烦.我无法为@RestController类设置名称.

我正在使用Spring启动和Swagger2.

以下代码将在springfox ui中生成一个名为"rest-status-controller"的控制器.我期待一个"应用程序状态".还有其他配置我不知道吗?

@Api("Application Status")
@RestController
@RequestMapping("/rest/status")
public class RestStatusController {

    @ApiOperation(value="Get components current status")
    @RequestMapping(method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON)
    public String global() {
    //...
    }

    @ApiOperation(value="Get mysql current status")
    @RequestMapping(value="/mysql" method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON)
    public String mysql() {
    //...
    }
}
Run Code Online (Sandbox Code Playgroud)

swagger spring-boot springfox

11
推荐指数
4
解决办法
8103
查看次数

验证Java 8日期

我想验证几种日期格式,如下例所示:

YYYY
YYYY-MM
YYYY-MM-DD
Run Code Online (Sandbox Code Playgroud)

验证必须确保日期格式正确且日期存在.

我知道Java 8提供了一个新的Date API,所以我想知道它是否能够完成这样的工作.

有没有更好的方法使用Java 8 date API?将Calendar类与lenient参数一起使用仍然是一个好习惯吗?

java java-8

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

Spring @ControllerAdvice vs ErrorController

在我的REST服务应用程序中,我计划创建一个@ControllerAdvice类来捕获控制器抛出异常并根据错误类型返回ResponseEntity对象.

但我已经设置了一个@RestController扩展ErrorController来捕获"whitelabel"错误.

这两个人是否以任何方式干涉?在哪种情况下,在设置@ControllerAdvice时会调用ErrorController?

编辑ErrorController代码按要求

@RestController
public class ControllerCustomError implements ErrorController{

    //error json object
    public class ErrorJson {

        public Integer status;
        public String error;
        public String message;
        public String timeStamp;
        public String trace;

        public ErrorJson(int status, Map<String, Object> errorAttributes) {
            this.status = status;
            this.error = (String) errorAttributes.get("error");
            this.message = (String) errorAttributes.get("message");
            this.timeStamp = errorAttributes.get("timestamp").toString();
            this.trace = (String) errorAttributes.get("trace");
        }

    }

    private static final String PATH = "/error";

    @Value("${hybus.error.stacktrace.include}")
    private boolean includeStackTrace = false;

    @Autowired
    private ErrorAttributes errorAttributes;

    @RequestMapping(value = PATH)
    ErrorJson …
Run Code Online (Sandbox Code Playgroud)

error-handling spring exception spring-mvc spring-boot

9
推荐指数
1
解决办法
1435
查看次数

Thymeleaf vs Tiles

我计划使用Spring Boot将MVC应用程序从Spring 3移植到Spring 4.

此Web应用程序使用Apache Tiles.

考虑到Thymeleaf似乎是Spring的新标准,并且有很好的集成,我有点困惑.

在这个应用程序中配置Tiles很痛苦.

我们在这个应用程序中有20个JSP页面.

问题:

  • Thymeleaf和Tiles是相似的概念吗?(模板引擎?)
  • 我已经看到Thymeleaf可以和Tiles一起使用......我看不出怎样和为什么
  • 保持Tiles并使其与Spring 4/Boot应用程序一起工作会更好吗?
  • 将Tiles/JSP移植到Thymeleaf模板会更好吗?

java spring jsp spring-mvc

8
推荐指数
1
解决办法
5393
查看次数

如何在Java 8中将方法作为参数传递?

我不明白如何使用lambdas将方法作为参数传递.

考虑以下(不编译)代码,如何完成它以使其工作?

public class DumbTest {
    public class Stuff {
        public String getA() {
            return "a";
        }
        public String getB() {
            return "b";
        }
    }

    public String methodToPassA(Stuff stuff) {
        return stuff.getA();
    }

    public String methodToPassB(Stuff stuff) {
        return stuff.getB();
    }

    //MethodParameter is purely used to be comprehensive, nothing else...
    public void operateListWith(List<Stuff> listStuff, MethodParameter method) {
        for (Stuff stuff : listStuff) {
            System.out.println(method(stuff));
        }
    }

    public DumbTest() {
        List<Stuff> listStuff = new ArrayList<>();
        listStuff.add(new Stuff());
        listStuff.add(new Stuff());

        operateListWith(listStuff, methodToPassA); …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

7
推荐指数
2
解决办法
2689
查看次数

使用 Quartz 安排暂停的作业

我想创建一个处于暂停状态的工作。

Trigger trigger = TriggerBuilder.newTrigger()
/* Trigger config */
.build();

JobDetail job = JobBuilder.newJob(JobLauncher.class)
/* Job Config */
.build()

//schedule job (might be in paused state...)
scheduler.scheduleJob(job, trigger);
Run Code Online (Sandbox Code Playgroud)

我在 TriggerBuilder 或 JobBuilder 中找不到任何方法来将触发器或作业设置为在计划时处于暂停状态。

我被迫在调度后使用这样的东西

//pause just scheduled job...
scheduler.pauseJob(jobKey);
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

java quartz-scheduler

6
推荐指数
0
解决办法
971
查看次数

恩格用吸气剂

枚举是否能够存储对getter方法的引用,使用Supplier

这样使用:

String value = myEnum.getValue(object)
Run Code Online (Sandbox Code Playgroud)

我无法想象如何在不编译错误的情况下编写它.

java enums java-8

6
推荐指数
2
解决办法
794
查看次数

Spring4 JUnit测试:将SQL加载到H2 db

我正在尝试为Spring Boot(Spring 4)应用程序编写测试.

我的Junit测试类配置如下,以允许自动装配.

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringApp.class)
public class MyServiceTest {
...
Run Code Online (Sandbox Code Playgroud)

src/main/resources/application.properties是这样的

spring.jpa.database=POSTGRESQL
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.datasource.username=BNF0016779
spring.datasource.password=
Run Code Online (Sandbox Code Playgroud)

在测试上下文中,src/test/resources/application.properties只是空的.

在像往常一样查询数据库,创建对象...

但我想创建一个数据init sql.

从一个奇怪的行为开始,似乎Spring在类路径中加载任何"schema.sql".不需要像下面这样的东西?

//This is not required to execute schema.sql
@Configuration
public class DatabaseTestConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("classpath:schema.sql")
            .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我无法从此SQL创建任何表.永远收到org.h2.jdbc.JdbcSQLException: Table "MY_TABLE" already exists; SQL statement:

H2应该是一个内存中的数据库,两个启动之间不保存数据!为什么我会收到这些错误?

有任何想法吗 ?谢谢

java junit spring spring-test

5
推荐指数
1
解决办法
3911
查看次数

避免石英失火

我面临着石英和失火的痛苦问题。

我的应用程序创建允许用户创建CronTrigger和SimpleTrigger作业。

可以暂停/恢复每个作业(使用Scheduler.pauseJob和Scheduler.resumeJob)

调度程序本身可以设置为待机状态。

我们想抛弃所有的失火:

  • 调度程序处于待机状态时
  • 作业暂停时
  • 当应用程序停止时

如本博客文章http://www.nurkiewicz.com/2012/04/quartz-scheduler-misfire-instructions.html中所述,我已经尝试过

  • CronTrigger的withMisfireHandlingInstructionDoNothing策略
  • SimpleTrigger的withMisfireHandlingInstructionNextWithRemainingCount

但是没有人可以放弃失火。

我目前在作业执行方法中使用丑陋的解决方法:

public void execute(JobExecutionContext context) throws JobExecutionException {
    Date dateNow = new Date();
    long diff = dateNow.getTime() - context.getScheduledFireTime().getTime();
    if (diff > 500)
    {
         //its a misfire
         return;
    }

    /* rest of job execution code */
Run Code Online (Sandbox Code Playgroud)

如果ScheduledFireTime比现在早500毫秒以上,则将其丢弃。

但似乎有时在生产环境中,这允许执行一些作业(据报道,重启应用程序时会发生)

那有可能吗?有什么漂亮的方法可以避免失火?

Quartz版本:2.1.7(在Spring 3.2.5应用程序中)

石英。属性

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.dataSource=psqldatasource
org.quartz.dataSource.psqldatasource.driver=${db.driver}
org.quartz.dataSource.psqldatasource.URL=${db.url}
org.quartz.dataSource.psqldatasource.user=${db.usr}
org.quartz.dataSource.psqldatasource.password=${db.pwd}
org.quartz.threadPool.threadCount = 3

org.quartz.jobStore.useProperties = false
org.quartz.jobStore.driverDelegateClass =  org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
Run Code Online (Sandbox Code Playgroud)

对于Cron:

 JobDetail job = JobBuilder.newJob(JobLauncher.class)
 .withIdentity(jobIdentifierBean.getNameJob(), jobIdentifierBean.getNameGroup())
 .usingJobData(...) //defining …
Run Code Online (Sandbox Code Playgroud)

java quartz-scheduler

5
推荐指数
1
解决办法
5437
查看次数

Apache Commons Imaging的Maven依赖

我需要访问JPEG和TIFF元数据。

对于此任务,我尝试使用Apache Commons Imaging库,该库似乎在Maven Central中不可用。如何添加此依赖项?

java apache-commons maven

5
推荐指数
1
解决办法
2007
查看次数