繁体   English   中英

Spring云默认配置文件

[英]Spring cloud default profile

在我正在进行的项目中,我们需要多个配置文件,即“默认”和“云”。
DefaultContext和CloudContext包含相同的bean定义我们正在使用PCF(Pivotal Cloud Foundry)

我们创建了一个界面

public interface Config {
    public DataSource getDataSource();
    public SomeService getService();
}

然后使用此接口实现每个配置文件

@Primary
@Configuration
@Profile("default")
public class DevConfig implements Config
{
    public DataSource getDataSource() {
         // create and return production datasource
    }

    public SomeService getService() {
        // Create and return production service
    }
}

然后对云做同样的事情。

@Configuratio
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig implements Config
{
    public DataSource getDataSource() {
         // create and return dummy datasource
    }

    public SomeService getService() {
        // Create and return dummy service
    }
}

我们在处理器文件中的服务调用中进行自动装配。

@Service("processor")
public class Processor {

    @Autowired Config dsConfig;

    public object get(int Number)
    {
        return dao.get(Number,dsConfig.getDataSource());
    }
}

如果我们部署在PCF中,它的工作正常,因为配置文件是云。 如果我们在本地运行,它应该获取默认配置文件,但dsConfig为null。 你能帮忙吗?

@Configuration类不可用于自动装配。

正如@spencergibb在评论中指出的那样,您需要告诉容器使这些类可用于自动装配。

为此,用@Component注释它们。

像这样的东西:

@Component
@Profile("default")
public class DevConfig implements Config
{
    public DataSource getDataSource() {
         // create and return production datasource
    }

    public SomeService getService() {
        // Create and return production service
    }
}

如果仍然无效,请检查以下两点:

  • 你有不同包中的配置( DevConfigCloudconfig ),以便ContextScan找不到它吗?
  • 你是在本地运行另一个档案吗? (像Dev )。

您可以将此剪辑剪切到您的代码(来自JHipster)以记录活动配置文件。

    @Autowired
    private Environment env;

    /**
     * Initializes Application.
     * <p/>
     * Spring profiles can be configured with a program arguments --spring.profiles.active=your-active-profile
     * <p/>
     */
    @PostConstruct
    public void initApplication() throws IOException {
        if (env.getActiveProfiles().length == 0) {
            log.warn("No Spring profile configured, running with default configuration");
        }
        else {
            log.info("Running with Spring profile(s) : {}", Arrays.toString(env.getActiveProfiles()));
        }
    }

我宁愿自动装配数据源和服务类而不是配置类。 通过这种方式,您不需要任何配置实例,并直接自动装配您想要的任何类。

因此,类将如下所示。 默认配置:

@Primary
@Configuration
@Profile("default")
public class DevConfig implements Config
{
    @Bean
    public DataSource getDataSource() {
     // create and return production datasource
    }

    @Bean
    public SomeService getService() {
        // Create and return production service
    }
}

云配置:

@Configuration
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig implements Config
{
    @Bean
    public DataSource getDataSource() {
         // create and return dummy datasource
    }

    @Bean
    public SomeService getService() {
        // Create and return dummy service
    }
}

处理器类:

@Service("processor")
public class Processor {

    @Autowired
    private DataSource dataSource;

    public object get(int Number)
    {
        return dao.get(Number,datasource);
    }
}

暂无
暂无

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

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