错误问题记录

java.lang.OutOfMemoryError: PermGen space:
错误解释:内存溢出
解决办法,tomcat安装目录--bin--catalina.bat:
找到:   echo Using CATALINA_BASE:   "%CATALINA_BASE%"
在这句话上面加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m,然后想修改多大就可以改成什么

问题2:
集成本地仓库的问题:依赖爆红,注解爆红,以及Libraries没有相应的依赖问题

1.本地maven一定要安装好,
检测方式 cmd–mvn -v 有maven的版本以及其他内容,安装成功,否则失败
2.在maven安装路径下:
conf—setting.xml中指定自己的maven依赖包的地址:
如下图:
在这里插入图片描述
3.一定要注意检查自己本地仓库的依地址,如下图
在这里插入图片描述
4.这个时候注解爆红,光标到报错的注解上 alt+enter: 找到添加路径的标识,点击,这个时候,所有的依赖,就会自动导入到Libraries中,
另外:单个导出的方式如下图:
在这里插入图片描述

问题3:
前端是var类型,也就是相当于是String类型的数据,但是后端需要是Date类型的,这个时候,如果直接传,会报错,
解决办法:后端的date数据类型上面,加注解@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd HH:mm:ss zzz yyyy"),后面的样式我这里跟前端的样式不一致,没有后面的zzz yyyy.也是可以的。
问题4:
前端请求后端的过程步骤如下:
1.需要定义一个js,来确定后端的请求路径:
//可以引入其他的别的文件,  import  service from '../../......'
let  myUrl=“请求的路径”
export const 方法名 =query=>{
	return service({
			url:myUrl+"具体的方法名",
			method:'post' //请求类型
			data:query  //传的参数   data:是字段们也就是一个一个的值,params:这个是拼接的字符
	})
}
2.在相应的前端页面,引入,并载入你的这个方法
在相应的页面上:

引入上面写的js
import {js中的方法名,多了用“,”隔开} from '../../../'   最后这个路径是上面js的路径

在实现方法的时候:
方法名(传的参数).then(
	function(msg){   //程序无错误的时候,返回的数据  也就是ajax中的success
	
),
function(){      //程序出错的时候执行的方法,也就是ajax中的error
}

jdbc错误:too mant connections:
原因1:首先查看代码中连接数据之后有没有close()关闭释放资源
		2.查看自己的mysql数据库中的最大连接数是不是过小(命令:show global variables like 'max_connections')
问题:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/E:/maven/setup/apache-maven-3.6.3-bin/maven-repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/E:/maven/setup/apache-maven-3.6.3-bin/maven-repository/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.slf4j-log4j12.classic.util.ContextSelectorStaticBinder]
错误原因:找到两个路径一样的StaticLoggerBinder.class,实际绑定的是org.slf4j.slf4j-log4j12.classic.util.ContextSelectorStaticBinder,所以启动不了
解决办法:让其绑定ch.qos.logback.classic.util.ContextSelectorStaticBinder,删除掉org/slf4j/slf4j-log4j12的绑定信息,就是直接从pom文件中删除slf4j-log4j12的依赖,刷新maven,重新启动
问题:注意,我这里是内网环境
springboot启动失败,找不到或无法加载主类 
解决办法:cmd  cd 项目路径
	mvn clean install  回车  删除之前的target文件重新生成
		没有做的话就继续下一步,有错误,
		我这里遇到的问题是生成doc文件的时候,扫描到注解,然后报错,这个东西是区分jdk1.7和1.8的呢,如下是解决办法:	
			方法一:写死  这里我是用的这个方法
				<plugin>
					    <groupId>org.apache.maven.plugins</groupId>
					    <artifactId>maven-javadoc-plugin</artifactId>
					    <version>3.0.0-M1</version>
					    <configuration>
					        <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
					        <additionalJOptions>
					            <additionalJOption>-Xdoclint:none</additionalJOption>
					        </additionalJOptions>
					    </configuration>
				</plugin>
			方法二:灵活配置
			<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-javadoc-plugin</artifactId>
			    <version>3.0.0-M1</version>
			    <configuration>
			        <additionalparam>${javadoc.opts}</additionalparam>
			    </configuration>
		</plugin>
		<profiles>
		    <!-- 禁用注释检查 -->
		    <profile>
		        <id>disable-javadoc-doclint</id>
		        <activation>
		            <jdk>[1.8,)</jdk>
		        </activation>
		        <properties>
		            <javadoc.opts>-Xdoclint:none</javadoc.opts>
		        </properties>
		    </profile>
		</profiles>
原文链接:https://blog.csdn.net/qq_30038111/article/details/106279837

	mvn clean compile   重新编译
	mvn install    重新打包
	最后再重新启动
在连接Hbase的过程中,出现错误:
	Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method 	com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
	at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:229)
	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:202)
	at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:326)
	at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:301)
	at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:166)
	at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:161)
	at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:794)
	at org.springframework.data.hadoop.hbase.HbaseTemplate$1.doInTable(HbaseTemplate.java:132)
	at org.springframework.data.hadoop.hbase.HbaseTemplate.execute(HbaseTemplate.java:61)
	... 75 more
本地错误原因:
	org.google.guava版本过高导致的,本地Hbase是1.2.5,之前的guava版本是19.0,但是guava17之前和之前差别是很大的,Stopwatch方法改变,
	解决办法:把guava版本降低到17之下,这里用的是16,问题解决
java连接Hbase的时候,Hbase用的是外部的zookeeper,连接的时候,控制台不报错,一直报null,直到超时
报错如下:
	DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8  replyHeader:: 26,154618875983,0  request:: '/hbase,F  response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table},
	DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8  replyHeader:: 26,154618875983,0  request:: '/hbase,F  response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table}
	DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8  replyHeader:: 26,154618875983,0  request:: '/hbase,F  response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table}
	解决办法:
		需要在你电脑的host文件中加上那个zookeeper的hosts和主机名
		hoast文件地址:C:\Windows\System32\drivers\etc\hosts(windows)
		格式如下:127.0.0.1 node01 //这里的node01是主机名
错误:运行hive的时候
	java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): 
User root is not allowed to impersonate anonymous
原因:因为hive是基于hadoop的,需要在hadoop中配置参数,java才能访问,否则,无法用java连接
修改:
修改 etc/hadoop/core-site.xml  加上 参数  此处我是用root运行的hadoop.,所有报的是root没有被允许,所以修改的参数也是root的用户,一定要注意你hadoop运行的用户
	<property>
	    <name>hadoop.proxyuser.root.hosts</name>
	    <value>*</value>
	</property>
	<property>
	    <name>hadoop.proxyuser.root.groups</name>
	    <value>*</value>
	</property>
导入josn的问题
问题描述:
	程序导出json之后,然后用编辑器打开json文件,然后保存,再导入程序的时候,会报错,a jsonobject text must begin with '{'  也就是说,json格式开头必须是{开头
问题原因:
	就是因为编辑器的原因,编辑器选用的utf-8编码的时候,会在文件前方和后方加一些编码字段,这也就是所说的bom头,
解决办法:就是把加上的bom头去掉,就可以啦,
具体方式:
	方式1:String sbString=getJsonString;
	if(StringUtil.isNotBlank(sbString) && sbString.startWith("\ufeff")){  //这里的参数是bom的编码
		sbString=sbString.subString(1);
	}
方式2:
	String sbString=getJsonString;
	if(StringUtil.isNotBlank(sbString)){  //这里的参数是bom的编码
		sbString=sbString.subString(sbString.indexOf("{"),sbString.lastInddexOf("}")+1)
	}
	
springboot中,自己写的dao层以及sql的实现,报如下错误:available parameters are list
原因:这个是因为mybatis传值默认是把传的参数封装到一个map中在sql中实现自己替换,但是,传list的时候,封装到map的时候出现错误
解决:在传值的时候,加上参数的注解@Param("list") List<String> list
springboot访问静态资源的问题
方式1:这里配置自定义拦截器并且配置静态资源
@Configuration
public class TnterceptorConfig implements WebMvcConfigurer(   //这是过滤的白名单
	@Bean
	public HandlerInterceptor getInterceptor(){    //正式的拦截器
		return new MyInterceptor
	}

	@Override
	public void addInterceptors(InterceptorRegistry registry){   //这是白名单
			list<String> list=new ArrayList<>();   //白名单的列表
			list.add("file/**")
			registry.addInterceptor(getInterceptor())
				.addPathPatterns("/**")   //拦截所有的请求
				.excludePathPatterns(list);   //释放不希望被拦截的请求
	}
	@Override
	public  void addResourceHandlers(ResourceHandlerRegistry registry){
		registry.addResourceHandler("/file/**")
			.addResourceLocations("classpath:/file/");
			 //多个静态资源地址,上面的代码写多个,就行
	}
}

方式2:在配置文件中写
这里展示application.properties
srping.mvc.static-path-pattern=/file/**   //这个是请求必须加上/file/
spring.resources.static-localtions=classpath:/file,classpath:/static  //设置静态资源的位置,多个,隔开
注意:本人只试验了静态位置多个,当时没有试验访问多个路径的时候,srping.mvc.static-path-pattern不知道能不能设置多个
shiro的问题
问题1:搭建过程中
shiroConfig 中,配置好三个核心方法之后,启动的时候,报循环依赖的文艺,这个是因为需要设置shiro中的@bean的声明周期,具体代码如下:
@Configuration
public class ShiroConfig {
	@Bean(name="shiroFilterFactoryBean")
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("webSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        // 设置安全管理器
        bean.setSecurityManager(defaultWebSecurityManager);
        /** 添加shiro的内置过滤器
         * anon:无需认证就可以访问
         * authc:必须认证才可以访问
         * user:必须拥有 ”记住我“ 功能才能访问
         * perms:拥有对某个资源的权限才能访问
         * role:拥有某个角色权限才能访问
         * **/
        // 拦截
        Map<String, String> filterChainDefinitionMap=new LinkedHashMap<>();
        // 授权
        filterChainDefinitionMap.put("/swagger-ui.html","anon");
        filterChainDefinitionMap.put("/webjars/**","anon");
        filterChainDefinitionMap.put("/swagger-resources/**","anon");
        filterChainDefinitionMap.put("/swagger-ui.html","anon");
        /*filterChainDefinitionMap.put("/user/add","perms[user:add]");
        filterChainDefinitionMap.put("/user/update","perms[user:update]");
        filterChainDefinitionMap.put("/user/*","authc");*/
        bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        // 设置没有登录返回到登录页面
        //bean.setLoginUrl("/tologin");
        // 设置没有授权返回到的提示页面
        //bean.setUnauthorizedUrl("/unauthorized");
        return bean;
    }

    /**
     * //bean的生命周期
     * @return  解决启动循环依赖的问题
     */
    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
        return new LifecycleBeanPostProcessor();
    }

    /**
     * 核心对象二:安全对象   DafaultWebSecurityManager       排序2
     * @param customRealm
     * @return
     */
    @Bean(name = "webSecurityManager")
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("customRealm") UserRealm customRealm,CustomShiroSession  sessionManager){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 关联realm
        securityManager.setRealm(customRealm);
        // shiro的sessionId
        securityManager.setSessionManager(sessionManager);
        return securityManager;
    }

    @Bean
    public UserRealm customRealm(){
        return new UserRealm();
    }

    /**
     * 自定义的shiroSession,前后端分离的时候,前端传回来的header里面必须包含这个东西authToken
     * @return
     */
    @Bean
    public CustomShiroSession  sessionManager(){
        CustomShiroSession customShiroSession=new CustomShiroSession();
        customShiroSession.setSessionDAO(new EnterpriseCacheSessionDAO());
        return customShiroSession;
    }	
}

问题2:shiro前后端分离的时候,token的问题,因为登录时候,shiro认证,会产生一个sessionId,然后没程序中每一处获取当前登录用户的时候,都是需要这个sessionId的,否则,拿不到用户信息,报错,所以建议,直接用这个sessionId来当token,每次前端传回来之后,都需要这个token,才能获取用户信息,方式如下:
	public class CustomShiroSession extends DefaultWebSessionManager {
    private  final  static Logger logger= LoggerFactory.getLogger(CustomShiroSession.class);

    private static final String AUTH_TOKEN="authToken";
    private static final String REFERENCED_SESSION_ID_SOURCE="Stateless request";

    public CustomShiroSession(){
        super();
        // 失效时间15分钟
        //setGlobalSessionTimeout(MILLIS_PER_MINUTE*15);
    }

    @Override
    protected Serializable getSessionId(ServletRequest request, ServletResponse response){
        String sessionId= WebUtils.toHttp(request).getHeader(AUTH_TOKEN);
        if (StringUtil.isBlank(sessionId)) {
            return super.getSessionId(request,response);
        }else{
            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,REFERENCED_SESSION_ID_SOURCE);
            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID,sessionId);
            request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID,Boolean.TRUE);
            return sessionId;
        }
    }
}
在结合上一个问题中Config中有配置sessionManager,就可以了
拦截器handler instanceof HandlerMethod一直是false 
原因:是因为在拦住的方法上,加上了@CacheEvich(value={”a“})这个注解,把这个注解移动到service层上,就解决这个问题了
Atlas集成hive之后,有两个需求
	1.hive能正常使用,能使用命令增删改查
	2.Atlas能实时同步hive里面的元数据
我这里遇到的问题:
	1.HiveHook.run():failed to process operation CREATETABLE  这个是不能实时同步Hive的增量数据
	2.org.atache.atlas.hive.hook.HiveHook.Initialize(HiveHook.java.76)   hivehook不能初始化
解决办法:
	步骤1:atlas安装目录下的hook/hive/atlas-hive-plugin-impl 连带目录atlas-hive-plugin-impl以及下面的文件,直接复制到hive安装目录下的lib下面(应该也可以把Atlas/hook/hive/atlas-hive-plugin-impl/下的文件一起复制到hive的lib下)
	步骤2:hive的配置文件。hive-env.sh  添加配置  
		export HIVE_AUX_JARS_PATH=指向hive下的lib就可以了
问题:hive执行计算sql,调用mapreduce失败,指出当前用户没有权限操作/tmp/hadoop-yarn下的东西
原因:这里使用的权限比较小的用户,权限不够
解决办法:
	1.进入到hadoop的目录下
	2.执行命令:sudo bin/hadoop fs -chmod -R 777 /tmp/hadoop-yarn
maven打包的时候遇到:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project gulimall-coupon...
原因:缺少maven-surefire-plugin这个包导致
解决办法:
	方法1:pom.xml文件中加上这个依赖
		 <build>
	        <plugins>
	            <plugin>
	                <groupId>org.apache.maven.plugins</groupId>
	                <artifactId>maven-surefire-plugin</artifactId>
	                <version>2.22.2</version>
	                <configuration>
	                    <skipTests>true</skipTests>
	                </configuration>
	            </plugin>
	        </plugins>
    	</build>
	方法2:打包的时候设置跳过测试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值