SpringBoot踩坑之旅-持续更新

本文详细记录了SpringBoot框架搭建过程中遇到的问题及解决方案,包括IDE选择、环境配置、多数据源连接、属性引用等关键步骤。特别关注了SpringBoot 2.3.1与2.4.0版本间的数据源配置差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此文章记录一下搭建SpringBoot踩到的坑,下次遇到可以不用找那么多资料了

首先  开发ide :eclipse 没有钱买idea  但是据说idea可以很快的搭建SpringBoot框架

jdk:1.8

maven:3.1.1 

第一步:

打开

https://start.spring.io/

这个网站

和创建maven项目差不多  写一点配置  然后  右边有集成的框架  写完之后  点  generate  就可以下载了

下载到本地 是个zip  解压之后 得到代码

然后把这对破烂玩意放进项目里

然后pom.xml会报个错

百度了一下在pom.xml 中的

加上maven的版本

<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>

启动类  即带有@SpringBootApplication注解的类

必须放在所有包的最前面 like

否则会404

------------------------------------------------------------------------------

关于配置文件

配置文件名称只能是application.properties或者application.yaml

yaml文件不会写 所以用properties

查资料据说新版springboot写访问路径要加servlet

server.servlet.context-path=/test  #一定要加‘/’ 如果不加 启动会报错
server.port=8083

如果接口名字是/test

那么访问接口的路径就是  ip:8083/test/test

sqlserver数据库连接的配置

#数据库连接
spring.datasource.url=jdbc:sqlserver://hostname:port;DatabaseName=dataBaseName
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.username=username
spring.datasource.password=password

#连接池配置
spring.datasource.initialSize=5
spring.datasource.maxActive=50
spring.datasource.minIdle=5

#mybatis配置
mybatis.mapper-locations=classpath*:com/centaline/mapper/*.xml

暂时未研究一个项目连接多库的配置  后续补充

这样启动的时候 会报错  

原因是找不到dao层的注入

要在main方法上加一行@MapperScan("com.centaline.mapper")

--------------------------------------------------------------------------------------------------------------------------------

springboot连接多数据源

首先更改application.properties

然后要写两个config

config代码如下:

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
//注册到springboot容器,相当于原来xml文件里的<beans>

@MapperScan(basePackages= {"com.centaline.mapper.mapper1"},sqlSessionFactoryRef="ds1SqlSessionFactory")
public class DataSource1Config {
	@Primary
    @Bean(name="ds1DataSource")//注入到这个容器
    @ConfigurationProperties(prefix="spring.datasource.ds1")//表示取application.properties配置文件中的前缀
    //#primary是设置优先,因为有多个数据源,在没有明确指定用哪个的情况下,会用带有primary的,这个注解必须有一个数据源要添加
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

	@Primary
    @Bean(name="ds1SqlSessionFactory")
    //@Qualifier("xxx")的含义是告诉他使用哪个DataSource
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/centaline/mapper/mapper1/*.xml"));
        return bean.getObject();
    }
	@Primary
	@Bean(name="ds1TransactionManager")//配置事务
	public DataSourceTransactionManager testTransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}
	@Primary
    @Bean("ds1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

config文件中有mapperscan的配置   所以要把启动类main方法里的mapperscanner删掉

@primary表示默认数据源  多个config文件中必须有个一个primary

config2和1类似  只需更改一下@bean的名字和xml位置  

注意:mybatis使用xml写sql的话 必须要加

这一行  要不然会找不到xml的位置

xml文件必须放在src/main/resource下   否则会报

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

至此 springboot框架搭建成功  实现多数据源查询  可以实现基本使用  

--------------------------------------------------------------------

eclipse其实集成了springboot的插件  据说可以一键搭建

但是我下载不下来那个插件 

spring官网下载页面404了

eclipse商店下载速度一直是0

放弃了

//------------------2020-12-17----------

今天遇到了一个很  不知道怎么形容的问题  

在springboot连接多数据源的时候

报了这么一个错

jdbcUrl is required with driverClassName.

无数次百度  告诉我的答案  都是把 application.properties中的jdbcUrl 改为jdbc-url  把driverClassName改为driver-class-name

但是我写的就是jdbc-url

并且找到了报错的位置   我写的driverClassName  也是可以识别出来的 

spring.datasource.ds1.jdbcUrl=jdbc:sqlserver://10.7.113.22;DatabaseName=HouseCoinMall
spring.datasource.ds1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

翻博客的时候看到了  我以前用的是springBoot2.3.1版本

而现在用的是2.4.0版本

换回2.3.1版本  果然不报错了

并且  

spring.datasource.ds1.jdbcUrl
spring.datasource.ds1.driver-class-name

spring.datasource.ds2.jdbc-url
spring.datasource.ds2.driverClassName

这几种写法 都能成功连到数据库

换成2.4.1版本也可以成功  2.4.0版本 不知道是怎么回事  就是不行

//-----------2021-09-16  -------------------

紧跟运维哥脚本  开始学习 springcloud+nacos+sentinel

首先要搭一个springcloud项目

建了好多个module

发现了个问题 我想在A module里  用B module的配置文件的属性 该怎么用呢

答案就是 在Amodule里 加入Bmodule的依赖

<dependency>
    <groupId>com.centaline</groupId>
    <artifactId>shopping-usercenter</artifactId>
    <version>0.1</version>
</dependency>

这样的 

然后把Bmodule的yml文件 改为 application-xxx.yml

然后在Amodule里  加这么点东西 就好了

spring:
  profiles:
    active: usercenter,test

 当一切都是那么顺利的时候 我想打个包  发一下服务器试试的时候

果然就开始报错  符合我的性格 不报错怎么写代码嘛

一直在报这个东西  好烦啊 百度一下  

说是要在父pom上 指定main方法在哪

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.centaline.mall.Application</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

加完了

 又开始一直报这个错误  好烦啊

 找了好多资料  都没有解决  然后想找别的开发兄弟问一下(确实是懒了)

 

12点了呀  懂得  还是要自己努力

终于 找到了这么一篇文章

上午的时候 确实找到过这篇文章   但是他第一句话就是 有两个打包插件的情况  因为我只有一个 所以当时我就直接关了  

下午的时候 又重新的看了一次这个文章  感觉突然 就开窍了

要不然我把没有主函数的module  换个打包插件呢

但是最后不是这样解决的 我是在没有主函数的module上加了一句话

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

这样 问题就解决了  运行起来了  个人感觉 换个插件 意思是一样的 但是我没有试过不敢保证 

//2022-03-22

刚发现了个问题 

springboot 2.6.4版本

org.mybatis.spring.boot2.1.2 可能有冲突

 会报这样一个错

并且已经确定  应该不是缺少jar包的问题 

不仅仅是mybatis2.1.2 随便换了几个版本都不行

处理方式暂时没有找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值