数据源无法实例化

huangapple go评论157阅读模式
英文:

DataSource failing to instantiate

问题

我正在尝试连接到外部的mssql数据库,但是我遇到了一个bean实例化异常。我尝试在我的主类上使用 @EnableJpaRepo 进行注解,排除 DataSourceAutoConfiguration 等。我尝试使用 MyBatis,它可以工作,但我被指示使用 Jpa。谢谢。

我的 .yml 文件:

  1. ansir.datasource:
  2. schema: schema
  3. jdbc-url: jdbc:sqlserver://SERVER:PORTNO;databaseName=DB;encrypt=false
  4. username: root
  5. password: pwd
  6. driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  7. hikari.maximum-pool-size: 10
  8. hikari.pool-name: HikariPool-ANSIR
  9. jpa:
  10. show-sql: true
  11. hibernate.dialect: org.hibernate.dialect.SQLServer2012Dialect
  12. hibernate.ddl-auto: none

我的配置类:

  1. @Value("${ansir.datasource}")
  2. private String SCHEMA_NAME;
  3. @Value("${ansir.datasource.jdbc-url}")
  4. private String jdbcUrl;
  5. @Value("${ansir.datasource.username}")
  6. private String username;
  7. @Value("${ansir.datasource.password}")
  8. private String password;
  9. @Value("${ansir.datasource.driver-class-name}")
  10. private String driverClassName;
  11. @Value("${ansir.datasource.hikari.maximum-pool-size}")
  12. private String maxPool;
  13. @Value("${ansir.datasource.hikari.pool-name}")
  14. private String poolName;
  15. @Value("${ansir.datasource.jpa.show-sql}")
  16. private String showSql;
  17. @Value("${ansir.datasource.jpa.hibernate.dialect}")
  18. private String hibernateDialect;
  19. @Value("${ansir.datasource.jpa.hibernate.ddl-auto}")
  20. private String ddl;
  21. private final Environment env;
  22. @Autowired
  23. public ANSIRConfiguration(Environment env) {
  24. this.env = env;
  25. }
  26. @Bean
  27. @ConfigurationProperties("ansir.datasource")
  28. public DataSource ansirDataSource() {
  29. return DataSourceBuilder.create()
  30. .driverClassName(env.getProperty(driverClassName))
  31. .url(env.getProperty(jdbcUrl))
  32. .username(env.getProperty(username))
  33. .password(env.getProperty(password))
  34. .build();
  35. }
  36. @Bean
  37. public PlatformTransactionManager ansirTransactionManager(@Qualifier("ansirEntityManager") LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {
  38. JpaTransactionManager transactionManager
  39. = new JpaTransactionManager();
  40. transactionManager.setEntityManagerFactory(
  41. entityManagerFactoryBean.getObject());
  42. return transactionManager;
  43. }
  44. @Bean("ansirEntityManager")
  45. public LocalContainerEntityManagerFactoryBean ansirEntityManager(@Qualifier("ansirDataSource") DataSource ansirDataSource) {
  46. LocalContainerEntityManagerFactoryBean entityManagerFactory
  47. = new LocalContainerEntityManagerFactoryBean();
  48. entityManagerFactory.setDataSource(ansirDataSource);
  49. entityManagerFactory.setPackagesToScan("com.autonation.ca.client.ansir.entity");
  50. entityManagerFactory.setPersistenceUnitName("ansir");
  51. HibernateJpaVendorAdapter vendorAdapter
  52. = new HibernateJpaVendorAdapter();
  53. entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
  54. HashMap<String, Object> properties = new HashMap<>();
  55. properties.put("hibernate.hbm2ddl.auto",
  56. env.getProperty(ddl));
  57. properties.put("hibernate.dialect",
  58. env.getProperty(hibernateDialect));
  59. properties.put("hibernate.proc.param_null_passing", true);
  60. properties.put("hibernate.show_sq", showSql);
  61. entityManagerFactory.setJpaPropertyMap(properties);
  62. return entityManagerFactory;
  63. }

我的堆栈跟踪:

  1. Caused by: java.lang.NullPointerException: null
  2. at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
  3. at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541)
  4. at java.base/java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:667)
  5. ...

谢谢。

英文:

I am trying to connect to an external mssql database but I am getting a bean instantiation exception. I have tried annotating my main class with @EnableJpaRepo, excluding DataSourceAutoConfiguration etc. I tried using myBatis and it worked but I've been instructed to use Jpa. Thank you.

My .yml file:

  1. ansir.datasource:
  2. schema: schema
  3. jdbc-url: jdbc:sqlserver://SERVER:PORTNO;databaseName=DB;encrypt=false
  4. username: root
  5. password: pwd
  6. driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  7. hikari.maximum-pool-size: 10
  8. hikari.pool-name: HikariPool-ANSIR
  9. jpa:
  10. show-sql: true
  11. hibernate.dialect: org.hibernate.dialect.SQLServer2012Dialect
  12. hibernate.ddl-auto: none

my config class:

  1. @Value(&quot;${ansir.datasource}&quot;)
  2. private String SCHEMA_NAME;
  3. @Value(&quot;${ansir.datasource.jdbc-url}&quot;)
  4. private String jdbcUrl;
  5. @Value(&quot;${ansir.datasource.username}&quot;)
  6. private String username;
  7. @Value(&quot;${ansir.datasource.password}&quot;)
  8. private String password;
  9. @Value(&quot;${ansir.datasource.driver-class-name}&quot;)
  10. private String driverClassName;
  11. @Value(&quot;${ansir.datasource.hikari.maximum-pool-size}&quot;)
  12. private String maxPool;
  13. @Value(&quot;${ansir.datasource.hikari.pool-name}&quot;)
  14. private String poolName;
  15. @Value(&quot;${ansir.datasource.jpa.show-sql}&quot;)
  16. private String showSql;
  17. @Value(&quot;${ansir.datasource.jpa.hibernate.dialect}&quot;)
  18. private String hibernateDialect;
  19. @Value(&quot;${ansir.datasource.jpa.hibernate.ddl-auto}&quot;)
  20. private String ddl;
  21. private final Environment env;
  22. @Autowired
  23. public ANSIRConfiguration(Environment env) {
  24. this.env = env;
  25. }
  26. @Bean
  27. @ConfigurationProperties(&quot;ansir.datasource&quot;)
  28. public DataSource ansirDataSource() {
  29. return DataSourceBuilder.create()
  30. .driverClassName(env.getProperty(driverClassName))
  31. .url(env.getProperty(jdbcUrl))
  32. .username(env.getProperty(username))
  33. .password(env.getProperty(password))
  34. .build();
  35. }
  36. @Bean
  37. public PlatformTransactionManager ansirTransactionManager(@Qualifier(&quot;ansirEntityManager&quot;) LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {
  38. JpaTransactionManager transactionManager
  39. = new JpaTransactionManager();
  40. transactionManager.setEntityManagerFactory(
  41. entityManagerFactoryBean.getObject());
  42. return transactionManager;
  43. }
  44. @Bean(&quot;ansirEntityManager&quot;)
  45. public LocalContainerEntityManagerFactoryBean ansirEntityManager(@Qualifier(&quot;ansirDataSource&quot;)DataSource ansirDataSource) {
  46. LocalContainerEntityManagerFactoryBean entityManagerFactory
  47. = new LocalContainerEntityManagerFactoryBean();
  48. entityManagerFactory.setDataSource(ansirDataSource);
  49. entityManagerFactory.setPackagesToScan(&quot;com.autonation.ca.client.ansir.entity&quot;);
  50. entityManagerFactory.setPersistenceUnitName(&quot;ansir&quot;);
  51. HibernateJpaVendorAdapter vendorAdapter
  52. = new HibernateJpaVendorAdapter();
  53. entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
  54. HashMap&lt;String, Object&gt; properties = new HashMap&lt;&gt;();
  55. properties.put(&quot;hibernate.hbm2ddl.auto&quot;,
  56. env.getProperty(ddl));
  57. properties.put(&quot;hibernate.dialect&quot;,
  58. env.getProperty(hibernateDialect));
  59. properties.put(&quot;hibernate.proc.param_null_passing&quot;, true);
  60. properties.put(&quot;hibernate.show_sq&quot;, showSql);
  61. entityManagerFactory.setJpaPropertyMap(properties);
  62. return entityManagerFactory;
  63. }

}

my stack trace:

Caused by: java.lang.NullPointerException: null
at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541)
at java.base/java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:667)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:591)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at com.zaxxer.hikari.HikariConfig.attemptFromContextLoader(HikariConfig.java:970)
at com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:480)
at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperty.set(DataSourceBuilder.java:460)
at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.set(DataSourceBuilder.java:355)
at org.springframework.boot.jdbc.DataSourceBuilder.build(DataSourceBuilder.java:190)
at com.autonation.ca.client.ansir.config.ANSIRConfiguration.ansirDataSource(ANSIRConfiguration.java:64)
at com.autonation.ca.client.ansir.config.ANSIRConfiguration$$EnhancerBySpringCGLIB$$307494cc.CGLIB$ansirDataSource$2(<generated>)
at com.autonation.ca.client.ansir.config.ANSIRConfiguration$$EnhancerBySpringCGLIB$$307494cc$$FastClassBySpringCGLIB$$d0e3b4d8.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at com.autonation.ca.client.ansir.config.ANSIRConfiguration$$EnhancerBySpringCGLIB$$307494cc.ansirDataSource(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)

Thank you.

答案1

得分: 0

application.yml文件更改为application.properties,并使用以下配置:

  1. ansir.datasource.schema= schema
  2. ansir.datasource.jdbc-url=jdbc:sqlserver://SERVER;databaseName=DB;encrypt=false
  3. ansir.datasource.username=root
  4. ansir.datasource.password=pwd
  5. ansir.datasource.driver-class-name= com.microsoft.sqlserver.jdbc.SQLServerDriver
  6. ansir.datasource.hikari.maximum-pool-size=10
  7. ansir.datasource.hikari.pool-name= HikariPool-ANSIR
  8. ansir.datasource.jpa.show-sql= true
  9. ansir.datasource.jpa.hibernate.dialect= org.hibernate.dialect.SQLServer2012Dialect
  10. ansir.datasource.jpa.hibernate.ddl-auto= none

application.yml文件中,不应该正常使用句号(period)。

英文:

change application.yml file to application.properties with these config,

  1. ansir.datasource.schema= schema
  2. ansir.datasource.jdbc-url=jdbc:sqlserver://SERVER;databaseName=DB;encrypt=false
  3. ansir.datasource.username=root
  4. ansir.datasource.password=pwd
  5. ansir.datasource.driver-class-name= com.microsoft.sqlserver.jdbc.SQLServerDriver
  6. ansir.datasource.hikari.maximum-pool-size=10
  7. ansir.datasource.hikari.pool-name= HikariPool-ANSIR
  8. ansir.datasource.jpa.show-sql= true
  9. ansir.datasource.jpa.hibernate.dialect= org.hibernate.dialect.SQLServer2012Dialect
  10. ansir.datasource.jpa.hibernate.ddl-auto= none

period is not normal use in application.yml file.

huangapple
  • 本文由 发表于 2023年2月18日 21:40:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/75493724.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定