我是靠谱客的博主 自觉大白,最近开发中收集的这篇文章主要介绍java web 经验笔记 (二)1.Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class有关datasource2. Circular view path [login]: would dispatch back to,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

java web 经验笔记 (一)

文章目录

  • 1.`Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class有关datasource`
  • 2. `Circular view path [login]: would dispatch back to the current handler URL [/login] again. Check your ViewResolver setup`
  • 3. `Error running 'SecurityTest.testPw': Failed to resolve org.junit.platform:junit-platform-launcher:1.5.2`
  • 4. `There was an unexpected error (type=Not Found, status=404).No message available`
  • 5. `Encoded password does not look like BCrypt`
  • 6. @Autowired注解时发现有错误提示:`could not autowire,no beans of "XXX" type found`,但程序的编译和运行都正常
  • 7. Reader r = new FileReader("userText.txt");系统找不到指定文件
  • 8. `Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start`
  • 9. `A component required a bean of type 'com.service.ThirdUserService' that could not be found.`
  • 10.`Resolved[org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]`
  • 11. `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mapper.UserMapper.login`
  • 12. 方法走不到,一直405!!
  • 13. 项目启动报错:`java.sql.SQLNonTransientConnectionException: Could not create connection to database server`
  • 14.项目启动报错:` org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionExcept ion: Could not create connection to database server. Attempted reconnect 3 times. Giving up.`
  • 15. 页面404 `http://localhost:8080/oauth/authorize?response_type=code&client_id=admin&redirect_uri= http://localhost:8080&scope=all`
  • 16. 项目运行报错`org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 : [no body]`
  • 17. 使用lombok的`@slf4j`, `log.info()`编译通过,运行报错,log符号找不到
  • 18. 项目启动报错:`A component required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.`

1.Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class有关datasource

因为我pom依赖文件中引入了mybatisl依赖,spring自动装配,却没有找到配置数据源,因此tomcat启动时会检查配置,找不到就报错了,tomcat启动失败
出现这个错误就是datasource数据源的问题,看看是否配置了,配置文件中的格式有没有错误(yml缩进细节注意了)
不想配置就直接在启动类注解上加东西,把它排除掉,不检测它。
如:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

此外,微服务项目中报错14.Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto,也是上述原因引起
父工程依赖有jdbc的相关配置,但子工程没有,启东时找不到配置就报错。
解决方法同上!

2. Circular view path [login]: would dispatch back to the current handler URL [/login] again. Check your ViewResolver setup

页面404
视图解析器问题 ,引入thymeleaf模板引擎

3. Error running 'SecurityTest.testPw': Failed to resolve org.junit.platform:junit-platform-launcher:1.5.2

原因:缺少测试对应的依赖
解决方法: 类文件中加上 import org.testng.annotations.Test; 后根据idea提示,加上包对应的依赖即可。

4. There was an unexpected error (type=Not Found, status=404).No message available

页面404!!
原因:直接访问springboot项目下的templates目录里的html文件报错,templates目录是受保护的,不能直接访问,可以由控制层转向

5. Encoded password does not look like BCrypt

直白翻译:加密后的密码不像是BCrypt加密过后的
这个是因为我当时代码里登录逻辑中明文密码是用BCrypt加密的,如:

    @Bean
    public PasswordEncoder getPw(){
        return new BCryptPasswordEncoder();
    }
 @Resource
    private PasswordEncoder pw;
     ....
     ....
     //对用户输入的密码加密。这里没从前端取用户输入的,直接写了意思一下
     String password = pw.encode("123456");

对比密码时是拿着这个加密过后的password和数据库中的对比
但是由于数据库里存的密码是明文(我忘改了),就报错了。。。
解决方法:数据库改成存密文
但是要注意,这个存的密文一定是要经过BCrypt(你代码中指定的那个加密算法)加密的,不然还是会报这个错误,。
一般注册的时候会把用户密码以密文形式存储到数据库(经过加密存到数据库),但是由于我这里是直接在数据库中写入用户测试数据,所以就不知道密文了,那怎么直接测试数据库密文?
如下,写个测试类,把加密后的密文输出,再直接写到数据库中去。

@SpringBootTest
public class SecurityTest {

    @Test
    public void testPw(){
        PasswordEncoder pw = new BCryptPasswordEncoder();
        //加密(盐不一样,每次加密的密文也不一样)
        String encode = pw.encode("123456");
        System.out.println(encode);
        //比较密码
        boolean matches = pw.matches("123456", encode);
        System.out.println(matches);
    }
}

6. @Autowired注解时发现有错误提示:could not autowire,no beans of "XXX" type found,但程序的编译和运行都正常

用@Resource注解替换@Autowired注解(纯粹看爆红不爽)

另外,idea中用@Autowired注入field时,会有波浪线警告,
在这里插入图片描述
idea不推荐我们使用@Autowired注解,具体查看大佬博客 为什么idea不推荐我们使用@Autowired注解

此外@Autowired常和@Quilefier搭档(常用来指定同一个接口下的多个实现类),但是@Quilefier(" 这里不能从配置文件中取数据") ,而用@Resource(name=" ${xx.xx}")则可以。亲测。

7. Reader r = new FileReader(“userText.txt”);系统找不到指定文件

文件路径的问题。txt文件我放在了springboot项目的resources目录下,

springboot默认读取资源文件从resources下读取,只要不在默认的resources目录下,都要在pom.xml中配置,
具体配置类似:

<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>/.properties</include>
                    <include>**/.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
</resources>

放在resource下,写路径的时候可以直接 classpath:xxx.xx
看了下编译过后的class文件,里面确实有我要读取的文件,但是,运行还是报错,找不到文件。
Reader r = new FileReader(“userText.txt”)
只写了个文件名,idea中鼠标移上去还能看到文件的绝对路径,但就是运行起来找不到,
最后解决办法是,把绝对路径写上去就可以了。
Reader r = new FileReader(“D:软件IntelliJ IDEA 2020.1.2ideaProjectsmultiAuthenticationmyloginsrcmainresourcesuserText.txt”);

8. Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start

原因:springBoot和springcloud版本冲突
最后用的是2.3.4.Release 和 Hoxton.SR8

9. A component required a bean of type 'com.service.ThirdUserService' that could not be found.

springboot项目启动报错!组件需要找不到“Service”类型的bean
一般是因为service的实现类serviceimpl忘记了加@Service注解(根源是:找不到接口的实现类)

我这里报错是因为,由于我是微服务间调用接口,用了@FeignClient(" name="提供端的spring.application.name")
openfeign的pom依赖引入错误,消费端接口上的@FeignClient注解就无效,导致消费端启动运行时不能动态生成接口代理实现类,启动失败!报错,找不到bean。

10.Resolved[org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

原因:因为我前台使用表单提交的数据,默认contentTypeapplication/x-www-form-urlencoded;charset=UTF-8,而我的controller方法参数用了@RequestBody,表示将前台传来的json数据绑定到对象上,如果这样的话,前台提交数据时应该指定contentType是application/json,而我前端传过来的实际上是个实体对象,因此报错!
解决方法:
1. 把方法的参数接收格式修改为接收form表单。把注解@RequestBody 去掉,因为此注解表示接收的参数格式为json.(此方法不可取,原因: 我这里是微服务间接口调用,OpenFeign 在构造请求时需要@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@RequesBody等来构造http请求。不接受传一个对象)
2.(前端以ajax请求响应,返回给后端json,后端用@RequestBody绑定json数据和实体类对象的字段一一对应),后端测试时用postman测

11. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mapper.UserMapper.login

即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。
原因:
我的配置文件中 mybatis配置别名type-aliases-package失效!原因是mybatis不支持使用通配符 * !!!

解决办法: 法1. 将mybatis起别名的配置取消掉,mapper.xml文件中改用完全限定类名!
法2. 逐个包路径逗号分隔.
法3. 引入mybatis-plus依赖和别名配置
在这里插入图片描述
mybatis不支持通配符*
在这里插入图片描述

12. 方法走不到,一直405!!

微服务接口调用时,一个模块发起请求,但一直走不到另一个模块,以为是接口方法对应的请求路径、feign啥的配置错了,导致拿不到参数数据。

这时候考虑下请求是不是被拦截掉了,所以连方法都进不去。

我发起请求的模块里有登录的拦截器,但是对于另一个模块的登录请求路径我放行了啊。
测试一下直接从另一个模块发起请求,测试接口,运行报错,显示有拦截器。。。
但是我这个模块的拦截器早就删掉了,怎么会被拦掉呢?

原因是idea源码修改了,但target里编译后的文件里还存在我之前删了的拦截器。

解决方法: 右键模块名,**rebuild,**再重启就可以访问到了。

13. 项目启动报错:java.sql.SQLNonTransientConnectionException: Could not create connection to database server

告诉我连接太多,端口号被莫名占用了,查找下这个端口号被谁占用了,再把占用者杀死

win +R
cmd
netstat -ano|findstr “被占用的端口号” 如:netstat -ano|findstr “8080”
taskkill -PID 查询出来的占用端口的进程ID -F 如:taskkill -PID 878152 -F

14.项目启动报错:org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionExcept ion: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

连接数太多!
网上提供两个方案,换jdbc驱动版本/增大最大连接数
这里,后者成功了。关闭mysql服务,修改mysql根目录下的my.ini文件,改成100
max_connections=100
网上都说允许最大连接数默认100,结果我原本的文件里只有20.奇了个怪。

15. 页面404 http://localhost:8080/oauth/authorize?response_type=code&client_id=admin&redirect_uri= http://localhost:8080&scope=all

请求页面404!!!!
找了一下午原因,以为是OAuth授权服务器和资源服务器配置错了,不带参数的请求了一次还是404,难道是授权端点oauth/authorize出了问题??不应该呀。我把他拦截了?没有啊。拦截了应该报405,403
结果最后突然想到,上下文路径的问题!!!绝绝子,我忘了我的微服务项目改了上下文路径,。。
正确的请求路径是:
http://localhost:8080/multi/mylogin/oauth/authorize?response_type=code&client_id=admin&redirect_uri=http://localhost:8080&scope=all

16. 项目运行报错org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 : [no body]

想通过前端发起Oauth请求,回调函数走自动化系列,通过一个接口完成拿着code向授权服务器发起请求oauth/token,拿到access_token,再通过access/token拿到资源服务器下的资源。
结果走到这一句代码报错

Map resp = restTemplate.postForObject("http://localhost:8080/multi/mylogin/oauth/token", map, Map.class);

百度说参数问题,发现请求时没有加用户认证的信息 除了客户端凭证那些回调链接里的参数,如果postman测试发起请求,还需要Authorization 选择Basic Auth 填写用户名和密码
httpheaders.setBasicAuth(“admin”, "123456 " );

直接填写数据不好,能直接通过请求或响应带过来会更好!

17. 使用lombok的@slf4j, log.info()编译通过,运行报错,log符号找不到

解决方法:在pom依赖中指定lombok依赖的版本

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
 </dependency>

18. 项目启动报错:A component required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.

在 Spring Boot 1.3版本中,会默认提供一个RestTemplate的实例Bean,而在 Spring Boot 1.4以及以后的版本中,这个默认的bean不再提供了,我们需要在Application启动时,手动创建一个RestTemplate的配置。

 @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

这样,我们在类中通过注解 @Autowired 使用 TestTemplate 的时候,程序就可以找到被实例化的 TestTemplate,就不会出现上述的报错了。

最后

以上就是自觉大白为你收集整理的java web 经验笔记 (二)1.Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class有关datasource2. Circular view path [login]: would dispatch back to的全部内容,希望文章能够帮你解决java web 经验笔记 (二)1.Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class有关datasource2. Circular view path [login]: would dispatch back to所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部