根据Spring 文档,JDBCTemplate 类“可以通过使用 DataSource 引用直接实例化在服务实现中使用,或者在应用程序上下文中做好准备并作为 bean 引用提供给服务”。
public class JdbcCorporateEventDao implements CorporateEventDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,与在上下文中定义jdbctemplate为单例并直接将其注入到Dao
public class JdbcCorporateEventDao implements CorporateEventDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在学习 Spring Core 认证,我对如何正确回答这个问题有些疑问:
\n\n\n\n\n如何在 Spring 中配置数据源?哪种 bean 对于开发非常有用?
\n
我认为我可以这样做来在 Spring XML 配置文件中配置DataSource :
\n\n<bean id=\xe2\x80\x9cdataSource\xe2\x80\x9d class=\xe2\x80\x9corg.apache.commons.dbcp.BasicDataSource\xe2\x80\x9d>\n <property name=\xe2\x80\x9curl\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.url}\xe2\x80\x9d />\n <property name=\xe2\x80\x9cusername\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.username}\xe2\x80\x9d />\n <property name=\xe2\x80\x9cpassword\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.password}\xe2\x80\x9d />\n</bean>\n\n<jdbc:initialize-database data-source=\xe2\x80\x9cdataSource\xe2\x80\x9d>\n <jdbc:script location=\xe2\x80\x9cclasspath:schema.sql\xe2\x80\x9d />\n <jdbc:script location=\xe2\x80\x9cclasspath:test-data.sql\xe2\x80\x9d />\n</jdbc:initialize-database>\nRun Code Online (Sandbox Code Playgroud)\n\n所以我认为答案 bean 是org.apache.commons.dbcp.BasicDataSource。这个断言是真的还是我错过了什么?
\n\n到底代表什么配置标签?我很清楚它的作用,但到底代表什么?这是一个特殊的 bean 声明还是什么?
\n\n总氮
\n我正在尝试配置 Spring Boot 以便将 Tomcat 连接池连接到我的生产数据库。我的应用程序不是网络(我也有一些很难告诉春天)。
我有一个启动课程和另外 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());
}
}
Run Code Online (Sandbox Code Playgroud)
这是配置`
@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; …Run Code Online (Sandbox Code Playgroud) 我要执行以下选择语句
SELECT array_to_json(array_agg(row_to_json(opt)))
FROM (
SELECT * FROM option WHERE optionid IN (:tags)
)opt
Run Code Online (Sandbox Code Playgroud)
通过
MapSqlParameterSource params = new MapSqlParameterSource();
Integer[] a={2200,23};
params.addValue("tags", Arrays.asList(a));
getSimpleJdbcTemplate().queryForObject(statement, String.class, params);
Run Code Online (Sandbox Code Playgroud)
但是我总是遇到错误:
类org.springframework.dao.InvalidDataAccessApiUsageException没有为SQL参数'tags'提供值:没有为键'tags'注册的值
如果我使用相同:
Integer[] a = { 2200, 23 };
params.addValue("tags", Arrays.asList(a));
namedParameterJdbcTemplate.queryForObject(statement, params, String.class);
Run Code Online (Sandbox Code Playgroud) 我在 spring 文档中读到 MapSqlParameterSource 只是 Map 的包装器。使用MapSqlParameterSource代替Map有什么优点?
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
Run Code Online (Sandbox Code Playgroud) 在我的 Spring Boot 2.0.0.M6 应用程序中,我使用以下 Maven 依赖项安装了 LiquiGraph:
dependency>
<groupId>org.liquigraph</groupId>
<artifactId>liquigraph-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-jdbc-bolt</artifactId>
<version>3.1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我也使用 Spring Data Neo4j 5,这是我的 Neo4j 配置:
@Configuration
@EnableNeo4jRepositories(basePackages = "com.example.domain.repository.neo4j")
@EnableTransactionManagement
public class Neo4jConfig {
@Value("${neo4j.bolt.server.database.uri}")
private String boltServerDatabaseUri;
@Value("${neo4j.jdbc.server.database.uri}")
private String jdbcServerDatabaseUri;
@Value("${neo4j.username}")
private String username;
@Value("${neo4j.password}")
private String password;
@Bean
public Neo4jTransactionManager transactionManager() {
return new Neo4jTransactionManager(sessionFactory());
}
@Bean
public SessionFactory sessionFactory() {
return new SessionFactory(configuration(), "com.example.domain.model.neo4j");
}
@Bean
@DependsOn("liquigraph")
public org.neo4j.ogm.config.Configuration configuration() {
// …Run Code Online (Sandbox Code Playgroud) spring-jdbc spring-data-neo4j spring-boot spring-boot-actuator liquigraph
我正在使用 Spring Boot、H2 和 JPA 作为我的数据库,我可以通过将连接属性放入application.properties. 但我不知道如何使用Spring Boot为我建立的连接。
在下面的代码中,我可以使用conn运行语句等。
static final String JDBC_DRIVER = "org.h2.Driver";
static final String DB_URL = "jdbc:h2:~/test";
static final String USER = "sa";
static final String PASS = "";
Connection conn = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//This is what I want to do with spring as I obtain a conn variable and use it.
stmt = conn.createStatement();
String sql = "CREATE TABLE REGISTRATION " + …Run Code Online (Sandbox Code Playgroud) 如何使用 Spring 连接到多个动态不同的数据库(从我的数据库加载数据库的类型和连接信息)?
what I am trying to build?
I am building a Spring-Boot application that should be able to get data from my customers in the following ways:
1. Connect to my customer SQL DB (MySQL, MSSQL, PostgreSQL,etc...)
2. connect to my customer MongoDB,
3. read data from CSV/JSON files.
Run Code Online (Sandbox Code Playgroud)
当应用程序运行时,它会收到一个带有客户 ID 的 HTTP 请求。连接到。在这一点上,应用程序应该从我的数据库加载这个客户(包含他正在使用的数据库和连接到它的凭据),并且应该初始化到这个数据库的连接以便能够开始查询它。(数据库架构在一个客户与另一个客户之间是不同的,所以我还在我的数据库中维护了一组查询来查询客户)
我正在努力实现图表的蓝色部分:
java database-connection spring-jdbc spring-data-jpa spring-boot
概述: 该应用程序处理用户信息的基本 CRUD 功能。
问题:
从预先填充的 H2 数据库读取用户详细信息时,我在使用BeanPropertyRowMapper. 映射器无法初始化 User 实例,因为它无法使用数据类的默认构造函数。
数据类:
存储库:
错误:
Caused by: java.lang.IllegalArgumentException: No argument provided for a required parameter: parameter #0 id of fun <init>(kotlin.String, kotlin.String, kotlin.String, kotlin.String, java.util.Date): org.chrysalis.userservice.model.User
Run Code Online (Sandbox Code Playgroud)
提供特定的行映射器可以解决该问题,但我很困惑为什么BeanPropertyRowMapper无法创建响应。
抱歉,如果之前已经讨论过这个问题,但我在 @Transactional spring java 注释的所有相关讨论中找不到答案。
如果我们从具有 @Transactional 注释的方法调用另一个没有 @Transactional 注释的实例中的方法,会发生什么情况?@Transactaional 注解的方法中的事务会被挂起吗?或者会被传播吗?
我发现了很多关于对第二个方法的调用是否来自同一个实例的讨论,但如果第二个非事务性方法位于另一个实例中则没有。感谢您的帮助!
就像下面的例子一样,如果从 A 类中的 methoda() 调用 B 类中的 methodb() 会发生什么?来自 methoda 的事务会传播还是 methodb 会是非事务性的?
示例代码如下:
public class A {
@Autowired
B b;
@Transactional
public void methoda() {
b.methodb();
}
}
@Component
public class B {
// this method is non transactional and is called from method A in class A
public void methodb() {
//do some db updates
}
}
Run Code Online (Sandbox Code Playgroud) spring-jdbc ×10
java ×7
spring ×6
spring-boot ×4
jdbc ×3
autowired ×1
h2 ×1
kotlin ×1
liquigraph ×1
singleton ×1