gpt4 book ai didi

java - spring boot jdbc 连接

转载 作者:行者123 更新时间:2023-11-29 05:07:56 25 4
gpt4 key购买 nike

我正在尝试配置 spring boot,以便将 tomcat 连接池连接到我的生产数据库。我的应用程序不是网络(我也很难告诉 spring)。

我有一个 Startup 类和另外 3 个类

代码

@Configuration

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)

public class Starter {

private static Logger logger;

@Autowired
private static MyController controller;

public static void main(String[] args) {

// SpringApplication.setWebEnvironment(false);

SpringApplication.run(Starter.class, args);

LogbackConfigLoader lcl = new LogbackConfigLoader();
if (lcl.init()) {
logger = LoggerFactory.getLogger(Starter.class);
logger.debug("Initialized....");
}
else{
logger = LoggerFactory.getLogger(Starter.class);
}


logger.info(controller.getProva());

}


}

这里是配置`

@Configuration

@ConfigurationProperties(prefix="datasource.NIS")

public class NISDBConfiguration {

private String jdbcInterceptors;
private long validationInterval = 30000;

private org.apache.tomcat.jdbc.pool.DataSource pool;

@Value("${driver-class-name}")
private String driverClassName;

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

@Value("${username}")
private String username;

@Value("${password}")
private String password;

@Value("${maxActive}")
private int maxActive = 30;

@Value("${maxIdle}")
private int maxIdle = 8;

@Value("${minIdle}")
private int minIdle = 8;

@Value("${initialSize}")
private int initialSize = 10;

private String validationQuery;

private boolean testOnBorrow;

private boolean testOnReturn;

private boolean testWhileIdle;

private Integer timeBetweenEvictionRunsMillis;

private Integer minEvictableIdleTimeMillis;

private Integer maxWaitMillis;

public String getJdbcInterceptors() {
return jdbcInterceptors;
}

public void setJdbcInterceptors(String jdbcInterceptors) {
this.jdbcInterceptors = jdbcInterceptors;
}

public long getValidationInterval() {
return validationInterval;
}

public void setValidationInterval(long validationInterval) {
this.validationInterval = validationInterval;
}

public org.apache.tomcat.jdbc.pool.DataSource getPool() {
return pool;
}

public void setPool(org.apache.tomcat.jdbc.pool.DataSource pool) {
this.pool = pool;
}

public String getDriverClassName() {
return driverClassName;
}

public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public int getMaxActive() {
return maxActive;
}

public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}

public int getMaxIdle() {
return maxIdle;
}

public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}

public int getMinIdle() {
return minIdle;
}

public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}

public int getInitialSize() {
return initialSize;
}

public void setInitialSize(int initialSize) {
this.initialSize = initialSize;
}

public String getValidationQuery() {
return validationQuery;
}

public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}

public boolean isTestOnBorrow() {
return testOnBorrow;
}

public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}

public boolean isTestOnReturn() {
return testOnReturn;
}

public void setTestOnReturn(boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}

public boolean isTestWhileIdle() {
return testWhileIdle;
}

public void setTestWhileIdle(boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}

public Integer getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}

public void setTimeBetweenEvictionRunsMillis(
Integer timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}

public Integer getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}

public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}

public Integer getMaxWaitMillis() {
return maxWaitMillis;
}

public void setMaxWaitMillis(Integer maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}

@Bean(name = "dsNIS")
public DataSource dataSource() {
this.pool = new org.apache.tomcat.jdbc.pool.DataSource();
this.pool.setDriverClassName(getDriverClassName());
this.pool.setUrl(getUrl());
this.pool.setUsername(getUsername());
this.pool.setPassword(getPassword());
this.pool.setInitialSize(getInitialSize());
this.pool.setMaxActive(getMaxActive());
this.pool.setMaxIdle(getMaxIdle());
this.pool.setMinIdle(getMinIdle());
this.pool.setTestOnBorrow(isTestOnBorrow());
this.pool.setTestOnReturn(isTestOnReturn());
this.pool.setTestWhileIdle(isTestWhileIdle());

if (getTimeBetweenEvictionRunsMillis() != null) {
this.pool
.setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis());
}
if (getMinEvictableIdleTimeMillis() != null) {
this.pool.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis());
}
this.pool.setValidationQuery(getValidationQuery());
this.pool.setValidationInterval(this.validationInterval);
if (getMaxWaitMillis() != null) {
this.pool.setMaxWait(getMaxWaitMillis());
}
if (this.jdbcInterceptors != null) {
this.pool.setJdbcInterceptors(this.jdbcInterceptors);
}
return this.pool;

}

@PreDestroy
public void close() {
if (this.pool != null) {
this.pool.close();
}
}

@Bean(name = "jdbcNIS")
public JdbcTemplate jdbcTemplate(DataSource dsNIS) {
return new JdbcTemplate(dsNIS);
}

}`

存储库

package org.hp.data;

@Repository

public class NisRepository {

protected final Logger log = LoggerFactory.getLogger(getClass());


@Autowired
@Qualifier("jdbcNIS")
protected JdbcTemplate jdbc;


public String getItem(long id) {
return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id);
}

private static final RowMapper<String> itemMapper = new RowMapper<String>() {
@Override
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
String item = rs.getString("title");
return item;
}
};


public JdbcTemplate getJdbc() {
return jdbc;
}

public void setJdbc(JdbcTemplate jdbc) {
this.jdbc = jdbc;
}

Controller

@Controller
public class MyController {


@Autowired
private NisRepository items;

public NisRepository getItems() {
return items;
}

public void setItems(NisRepository items) {
this.items = items;
}

public String getProva(){
return items.getItem(10);
}

但是我在运行 NullPointerException 应用程序时总是遇到异常,因为 MyController 不是 Autowiring 的并且始终为 null。

我也尝试用 new 创建一个新实例(但我认为这是不正确的,因为 spring mvc 模式)。

这里有什么问题?

提前致谢

最佳答案

您正在使用 Spring Boot,但非常努力地不想使用它。您还声明您没有使用 Web 应用程序,但为什么要使用 @Controller

要解决您的问题,请删除 DataSourceJdbcTemplate 的配置,Spring Boot 将为您配置这些。这基本上意味着删除您的 NISDBConfiguration 类。只需将正确的属性添加到 application.properties 文件即可。

spring.datasource.driver-class-name=<your-driver-here>
spring.datasource.url=<your-url>
spring.datasource.username=<your-username>
spring.datasource.password=<your-password>

当然还有您需要的其他属性,检查the reference guide更多属性。

从存储库的 JdbcTemplate 属性中删除 @Qualifier,您也不需要 getter 和 setter。我建议使用基于构造函数的注入(inject)。

package org.hp.data;

@Repository
public class NisRepository {

protected final Logger log = LoggerFactory.getLogger(getClass());

protected final JdbcTemplate jdbc;

@Autowired
public NisRepository(JdbcTemplate jbc) {
this.jdbc=jdbc;
}

public String getItem(long id) {
return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id);
}


private static final RowMapper<String> itemMapper = new RowMapper<String>() {
@Override
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
String item = rs.getString("title");
return item;
}
};

}

如果您没有 Web 应用程序,请将 @Controller 替换为 @Service

然后重写您的入门类(class)。

@SpringBootApplication
public class Starter {

private static Logger logger;

public static void main(String[] args) {

// SpringApplication.setWebEnvironment(false);

ApplicationContext ctx = SpringApplication.run(Starter.class, args);

LogbackConfigLoader lcl = new LogbackConfigLoader();
if (lcl.init()) {
logger = LoggerFactory.getLogger(Starter.class);
logger.debug("Initialized....");
}
else{
logger = LoggerFactory.getLogger(Starter.class);
}

MyController controller = ctx.getBean(MyController.class);
logger.info(controller.getProva());

}


}

看起来您也在尝试规避此处的 spring boots 配置加载?尝试使用框架而不是反对它。

如果您没有 Web 应用程序,请不要在您的依赖项中包含 spring-boot-starter-web 并确保您没有任何其他与 Web 相关的东西. Spring Boot 自动检测 Web 环境并尝试为此引导类,如果不存在,它将作为普通 Java 应用程序运行。

关于java - spring boot jdbc 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com