繁体   English   中英

Spring Roo和读取属性文件

[英]Spring Roo & reading property file

我想在Spring Roo项目中读取一个简单的属性文件。 看起来很简单,但是经过了超过半天的努力,我需要寻求帮助。

我在互联网上阅读了许多问答,但我无法使其正常工作。 用SpringSpring @PropertySource示例查看了Properties 我是Spring的新手,所以请耐心等待。

我的春季版本是3.2.8

问题:如何在BaseController类中检索test.name键值。

我创建了一个非常简单的Spring Roo应用程序来说明我的所作所为。

我的Roo脚本:

    // Create a new project
project --topLevelPackage com.springsource.pizzashop --projectName pizzashop

// Setup JPA persistence using EclipseLink and H2
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY

// Create domain entities
entity jpa --class ~.domain.Base
field string --fieldName name --sizeMin 2 --notNull

// Adding web layers
web mvc setup
web mvc all --package ~.web

默认情况下,在我的“ applicationContext.xml”中:

    <context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>

我没有更改此文件。 所以我没有加豆。

我在..resources \\ META-INF \\ spring \\文件夹中添加了test.properties文件,该文件也位于其中的database.properties旁边。

test.name=Google
test.url=www.google.com

我在base.java类文件旁边的... \\ java \\ com \\ springsource \\ pizzashop \\ domain \\ PizzaProperties.java中为配置文件添加了Java Bean。

package com.springsource.pizzashop.domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.roo.addon.javabean.RooJavaBean;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@RooJavaBean
@PropertySource("classpath:META-INF/spring/test.properties")
public class PizzaProperties {

    @Value("${test.name}")
    private String name;

    @Value("${test.url}")
    private String url;

}

当然,还将创建具有getter和setter的“ PizzaProperties_Roo_JavaBean.aj”。

找到属性文件,因为当我将名称更改为test1.properties时,出现错误。

我推入Base.list方法来测试是否能够读取属性文件。 在该方法中,我执行System.out.println。 结果始终是:

在Base.list中
名称=空

package com.springsource.pizzashop.web;
import com.springsource.pizzashop.domain.Base;
import com.springsource.pizzashop.domain.PizzaProperties;

import org.springframework.roo.addon.web.mvc.controller.scaffold.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@RequestMapping("/bases")
@Controller
@RooWebScaffold(path = "bases", formBackingObject = Base.class)
public class BaseController {

    @RequestMapping(produces = "text/html")
    public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {

        System.out.println("In Base.list");
        PizzaProperties config = new PizzaProperties();
        System.out.println("Name = " + config.getName());

        if (page != null || size != null) {
            int sizeNo = size == null ? 10 : size.intValue();
            final int firstResult = page == null ? 0 : (page.intValue() - 1) * sizeNo;
            uiModel.addAttribute("bases", Base.findBaseEntries(firstResult, sizeNo, sortFieldName, sortOrder));
            float nrOfPages = (float) Base.countBases() / sizeNo;
            uiModel.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages));
        } else {
            uiModel.addAttribute("bases", Base.findAllBases(sortFieldName, sortOrder));
        }
        return "bases/list";
    }
}

要允许Spring注入属性,必须是Spring如何创建Bean。

尝试这个:

添加到PizzaProperties @Bean批注( @RooJavaBean只是生成gettersetter

...
...

@RooJavaBean
@Component
@PropertySource("classpath:META-INF/spring/test.properties")
public class PizzaProperties {

...
...

BaseController@Autowired属性添加到PizzaProperties

...
...

@RequestMapping("/bases")
@Controller
@RooWebScaffold(path = "bases", formBackingObject = Base.class)
public class BaseController {

    @Autowired
    private PizzaProperties config;

    @RequestMapping(produces = "text/html")
    public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {


        System.out.println("In Base.list");
        System.out.println("Name = " + config.getName());

...
...

请注意,所有这些只是Spring配置,而不是特殊的Spring Roo东西。

祝好运!

jmvivo无疑使我走上了正确的道路。

稍作更新,我终于以一种非常简单,干净的方式设法在Spring Roo项目中读取属性文件。

1)在属性类中,仅@RooJavaBean和@Component就足够了! 不需要@PropertySource,也不需要添加@Bean。 可能是因为<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>所以不需要使用@PropertySource批注。

2)如jmvivo所示,我必须添加

@Autowired private PizzaProperties config;

到我要使用属性的类。

因此最终它非常干净和简单。 我喜欢保留它的KIS。

package com.springsource.pizzashop.domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.stereotype.Component;

@RooJavaBean
@Component
//@PropertySource("classpath:META-INF/spring/test.properties")
public class PizzaProperties {

    @Value("${test.name}")
    private String name;

    @Value("${test.url}")
    private String url;

}

@RequestMapping("/bases")
@Controller
@RooWebScaffold(path = "bases", formBackingObject = Base.class)
public class BaseController {

    @Autowired
    private PizzaProperties config;

    @RequestMapping(produces = "text/html")
    public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {

        System.out.println("In Base.list");
        System.out.println("Name = " + config.getName());

        ...
        ...

再一次感谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM