月度归档: 2015 年 1 月

  • 使用JsonNodeFactory快速构建Json响应

    在Spring中可以使用@ResponseBody来让返回对象直接转化为Json格式,这种方式需要提供一个专门的对象来作为内容的承载。

    如果只是需要快速的一段简单的Json响应就没有必要构造一个对象,然后让对象来承载内容了,可以直接使用JsonNodeFactory来构造。

    JsonNodeFactory是jackson中的类,我使用的是Spring Boot,自动包含了这个依赖库。

    使用时通过JsonNodeFactory.instance来获取工厂对象,然后进行创建。

    @RequestMapping(value ="/status")
    @ResponseBody
    public ObjectNodeshowSuccessStatus() {
    JsonNodeFactory factory = JsonNodeFactory.instance;
    ObjectNode objectNode = factory.objectNode();
    objectNode.set("status", factory.textNode("success"));
    return objectNode;
    }

    `…

  • 快速更改Spring Boot的Active Profile设定

    Spring Boot支持Active Profile,可以方便在不同的环境中快速切换配置,但是这个配置本身的修改却不够简洁。

    如果有两个profile,分别为dev和prod,那么在application.properties文件中

    spring.profiles.active=dev

    就指定了dev为当前配置。

    因为使用了gradle构建工具,所以希望通过类似./gradlew dev bootRun的方式直接切换。

    虽然Spring Boot本身支持运行时带参数,但是每次使用又有些繁琐,稍微修改一下build.gradle文件如下:

    task dev << {
    changeActiveProfile("dev")
    }
    task prod << {
    changeActiveProfile("prod")
    }
    def changeActiveProfile(profile) {
    def pFile = file("src/main/resources/application.properties")
    Properties p = new Properties()
    pFile.withInputStream 
    …
  • 在Spring Boot启动后执行指定代码

    在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等。

    在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Boot使用时就稍微有些区别了。

    创建ApplicationListener

    这里以填充部分测试数据为例子,首先实现ApplicationStartup类。

    publicclass ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    publicvoidonApplicationEvent(ContextRefreshedEvent event) {
    SourceRepository sourceRepository = event.getApplicationContext().getBean(SourceRepository.class);
    Source je =new Source("justice_eternal吧","http://tieba.baidu.com/f?kw=justice_eternal");
    sourceRepository.save(je);
    }
    }

    这类并不会自动执行,需要我们注册。

    硬编码注册

    Spring Boot有一个类SpringApplication,这个类是Spring Boot的入口,包含所有的配置。

    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    publicclass WebApplication {
    
    …