3
respostas

Criar variável de ambiente

Olá Leonardo, como crio uma variável de ambiente para minha aplicação Spring, Estou fazendo o curso ministrado por vc do Amazon EC2 e lá pede para uma variável ambiente, gostaria dessa dica por favor!


@Configuration
@EnableJpaRepositories("br.com.clipboard.financeiro.repository")
@EnableTransactionManagement
@PropertySource("classpath:/application.properties")
public class SpringDataConfig {

    @Autowired
    private Environment env;

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory factory) {
        JpaTransactionManager manager = new JpaTransactionManager();
        manager.setEntityManagerFactory(factory);
        manager.setJpaDialect(new HibernateJpaDialect());
        return manager;
    }

    @Bean
    public HibernateJpaVendorAdapter JpaVendorAdapter() {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(env.getProperty("hibernate.show.sql", Boolean.class));
        adapter.setGenerateDdl(env.getProperty("hibernate.ddl", Boolean.class));
        return adapter;
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(JpaVendorAdapter());
        factory.setPackagesToScan(
                env.getProperty("hibernate.package.scan"),
                env.getProperty("java.time.jpa.converter")
        );
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();        
        return factory.getObject();
    }

    @Bean(name = "dataSource")
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUsername(env.getProperty("jdbc.user"));
        dataSource.setPassword(env.getProperty("jdbc.pass"));
        dataSource.setDriverClassName(env.getProperty("jdbc.driverClass"));
        dataSource.setUrl(env.getProperty("jdbc.url"));
        return dataSource;
    }
}
jdbc.user = root
jdbc.pass = clipboard
#jdbc.url = jdbc:mysql://localhost:3306/contas
jdbc.url = jdbc:mysql://mysql-clipboard.cseewscw4mmo.us-east-1.rds.amazonaws.com:3306/contas
jdbc.driverClass = com.mysql.jdbc.Driver

Ao tentar acessar a aplicação vem o erro:

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
3 respostas

Clerman, tudo bem ?

Seguindo a documentação você pode usar a anotação @Value

E passar a chave que usar.

Ai na hora de subir o projeto pode apenas mudar o profile dele.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

E aí Clermam, blz?

Vc já tentou setar o dialeto do hibernate no método entityManagerFactory(). Sempre que uso com Spring seto ele no objeto LocalContainerEntityManagerFactoryBean. Segue exemplo abaixo com banco mysql.

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPackagesToScan("br.com.caelum");
        entityManagerFactory.setDataSource(dataSource);

        entityManagerFactory
                .setJpaVendorAdapter(new HibernateJpaVendorAdapter());

        Properties props = new Properties();

        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");

        entityManagerFactory.setJpaProperties(props);
        return entityManagerFactory;
    }

Olá Felipe, minhas classe esta devidamente configurada!

@Bean
    public HibernateJpaVendorAdapter JpaVendorAdapter() {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(env.getProperty("hibernate.show.sql", Boolean.class));
        adapter.setGenerateDdl(env.getProperty("hibernate.ddl", Boolean.class));
        return adapter;
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(JpaVendorAdapter());
        factory.setPackagesToScan(
                env.getProperty("hibernate.package.scan"),
                env.getProperty("java.time.jpa.converter")
        );
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();        
        return factory.getObject();
    }

    @Bean(name = "dataSource")
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUsername(env.getProperty("jdbc.user"));
        dataSource.setPassword(env.getProperty("jdbc.pass"));
        dataSource.setDriverClassName(env.getProperty("jdbc.driverClass"));
        dataSource.setUrl(env.getProperty("jdbc.url"));
        return dataSource;
    }

Agora se for outra configuração me da um toque por favor!