此文章记录一下搭建SpringBoot踩到的坑,下次遇到可以不用找那么多资料了
首先 开发ide :eclipse 没有钱买idea 但是据说idea可以很快的搭建SpringBoot框架
jdk:1.8
maven:3.1.1
第一步:
打开
这个网站
和创建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 随便换了几个版本都不行
处理方式暂时没有找到