当前位置: 首页 > 知识库问答 >
问题:

Spring boot通用应用程序属性

陈阳舒
2023-03-14

当我们使用任何数据库(如cassandra/mongo)时,Spring Boot应用程序属性需要遵循https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html的约定。如果我们想为数据库设置声明自己的属性而不是spring-boot约定,我们需要做哪些步骤来设置数据库

共有2个答案

山疏珂
2023-03-14

这些是在Spring Boot中设置Jdbc、mongodb等数据源所需的基本步骤

  • 需要启用事务管理的配置类

以下是在spring boot中连接mongodb数据源的一些片段

数据源配置。Java语言

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.example.xyz"})
public class DatabaseEntityConfiguration {

    public static final String DATABASE_ENTITY_DATA_SOURCE = "databaseDataSource";
    public static final String DATABASE_HIBERNATE_PROPERTIES = "databaseHibernateProperties";
    public static final String DATABASE_ENTITY_SESSION_FACTORY = "databaseSessionFactory";
    public static final String DATABASE_ENTITY_TRANSACTION_MANAGER = "databaseTransactionManager";
    public static final String DATABASE_ENTITY_DB_CONFIG_DAO = "dmdatabaseDbConfigDao";
    public static final String DATABASE_ENTITY_DB_CONFIG_SERVICE = "dmdatabaseDbConfigService";

    private static final String ENTITY_PACKAGE = "com.example.xyz.database.entity";

    @Autowired
    private org.springframework.core.env.Environment environment;

    @Bean(name = DATABASE_ENTITY_DATA_SOURCE)
    public DataSource databaseEntitydataSource() throws PropertyVetoException {

        // mongodb properties
        String driverClass = environment.getProperty("databaseEntity.mongodb.driverClassName");
        String mongodbUrl = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.url");
        String user = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.username");
        String password = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.password");

        Preconditions.checkArgument(StringUtils.isNotBlank(driverClass), "The property mongodb driverClass must not be null or blank");
        Preconditions.checkArgument(StringUtils.isNotBlank(mongodbUrl), "The property mongodb mongodbUrl must not be null or blank");
        Preconditions.checkArgument(StringUtils.isNotBlank(user), "The property mongodb user must not be null or blank");
        Preconditions.checkArgument(StringUtils.isNotBlank(password), "The property mongodb password must not be null or blank");

        dataSource.setDriverClass(driverClass);
        dataSource.setmongodbUrl(mongodbUrl);
        dataSource.setUser(user);
        dataSource.setPassword(password);

        return dataSource;
    }

    @Bean(name = DATABASE_ENTITY_SESSION_FACTORY)
    public AnnotationSessionFactoryBean databaseEntitySessionFactory() throws PropertyVetoException {
        AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
        annotationSessionFactoryBean.setDataSource(databaseEntitydataSource());
        annotationSessionFactoryBean.setPackagesToScan(ENTITY_PACKAGE);
        annotationSessionFactoryBean.setAnnotatedClasses(DBConfig.class);

        annotationSessionFactoryBean.setHibernateProperties(databaseEntityHibernateProperties());
        return annotationSessionFactoryBean;
    }

    @Bean(name = DATABASE_ENTITY_TRANSACTION_MANAGER)
    public HibernateTransactionManager databaseEntityTransactionManager() throws PropertyVetoException {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(databaseEntitySessionFactory().getObject());
        return transactionManager;
    }
}
关翰
2023-03-14

您可以这样做:Spring boot—应用程序中的自定义变量。属性

也可以在应用程序中创建自己的属性。属性文件,如:

<代码>我的。所有物someDb。主机名=http://wherever.com然后在代码中引用它,如:

@Value("${my.property.someDb.hostname}")
private String someDbHostname;

更新1:

如果您想使用自己的属性创建MongoDb,您必须在@Configuration文件中定义正确的JavaBeans。对于MongoDB,它可能如下所示:

@Configuration
public class MyMongoConfig extends AbstractMongoConfiguration{ 

  @Value("${my.property.someDb.hostname}")
  private String someDbHostname;

  @Value("${my.property.someDb.myOwnPortDefinition}")
  private int myOwnPortDefinition;

  @Value("${my.property.someDb.myDatabasename}")
  private String myDatabasename;

  @Override
  protected String getDatabaseName() {
    return myDatabasename;
  }

  @Override
  @Bean
  public Mongo mongo() throws Exception{
    return new MongoClient(someDbHostname, myOwnPortDefinition );
  }

  @Bean
  public MongoTemplate mongoTemplate() throws Exception{
    return new MongoTemplate(mongo(), getDatabaseName());
  }    
}
 类似资料:
  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud

  • 我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:

  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

  • null 当我运行带有库项目的主项目时(通过gradle、sourceControl、gitRepository),我可以看到库项目中的属性是空的。 如何使库项目使用从主应用程序传递下来的属性?