Spring Boot plugin requires Gradle 6.8.x, 6.9.x, or 7.x. The current version is Gradle

 

갑자기 gradle 버전이 낮다고 빌드가 되지 않을때

에러 내용 :  

* What went wrong:
A problem occurred evaluating root project 'test'.
> Failed to apply plugin [id 'org.springframework.boot']
   > Spring Boot plugin requires Gradle 6.8.x, 6.9.x, or 7.x. The current version is Gradle 6.0.1

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s

 

## 해결방법 1

버전 확인  

gradle -v

gradlew -v

둘중 하나 확인 해서 버전이 높은 것으로 실행 

 

## 해결방법 2

내컴퓨터 -> 속성 -> 시스템 정보

고급 시스템 설정

환경변수 설정에서 

path  클릭후 

gradle  변수가 중복으로 설정되어있는지 체크후 중복 값을 제거  

후에 빌드 실행 

spring batch 뜬금포 에러 

문제 

spring batch 를 테스트 하고 있는데 아래와 같은 뜬금없는에러 발생. 

에러 내용

java.lang.IllegalStateException: Failed to deserialize object type
	at org.springframework.util.SerializationUtils.deserialize(SerializationUtils.java:73)
	at org.springframework.batch.core.repository.dao.MapJobExecutionDao.copy(MapJobExecutionDao.java:50)
	at org.springframework.batch.core.repository.dao.MapJobExecutionDao.saveJobExecution(MapJobExecutionDao.java:60)
	at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:149)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:181)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	at com.sun.proxy.$Proxy60.createJobExecution(Unknown Source)
	at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:131)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	at com.sun.proxy.$Proxy77.run(Unknown Source)
	at com.penta.job.jobs.QuartzJob.executeInternal(QuartzJob.java:52)
	at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75)
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.ClassNotFoundException: org.springframework.batch.core.JobParameter
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at java.lang.Class.forName0(Native Method)

 

원인 

이클립스에서  톰캣 재기동 없이 웹어플리케이션를 개발할려고 개발 중간에 spring-loaded 를 적용 시켰는데  

이 모듈 적용후 위와 같은 에러가 발생. 

 

해결.

spring-loaded 설정을 제거 하면 해결. 

-javaagent:C:/zzz/springloaded-1.2.8.RELEASE.jar -noverify

 위 부분 제거. 

문제 

spring batch quartz 설정중에 . jndiURl로 설정하면  spring-batch-infrastructure.jar (org.springframework.batch.support.DatabaseType)에서 지원하지 않는 DB는 아래와 같이 오류가 발생한다. 

java.lang.IllegalArgumentException: DatabaseType not found for product name: [CUBRID]
	at org.springframework.batch.support.DatabaseType.fromProductName(DatabaseType.java:82)
	at org.springframework.batch.support.DatabaseType.fromMetaData(DatabaseType.java:121)

1차 문제 해결 

import javax.sql.DataSource;

import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
	
	@Autowired
	@Qualifier("datasource")
	private DataSource dataSource;
	
	@Autowired
	@Qualifier("dataSourceTx")
	private PlatformTransactionManager transactionManager;

	public BatchConfigurer() {
		super();
	}

	@Override
	protected JobRepository createJobRepository() throws Exception {
		JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
		factory.setDataSource(dataSource);
		factory.setDatabaseType("H2"); // 지원하지 않는 DB와 유사한 지원되는 DB를 지정해준다. 
		factory.setTransactionManager(transactionManager);
		factory.afterPropertiesSet();
		return factory.getObject();
	}

}

 

2차 문제  

quartz  만 사용해서 batch 를 사용하려고 했는데 jndi 를 사용하니 quartz db & batch 관련 db까지 만들어서 사용하는 문제가 발생

Caused by: cubrid.jdbc.driver.CUBRIDException: Syntax: Unknown class "batch_job_instance". select JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE whe...[CAS INFO-192.168.56.101:30000,2,3728],[SESSION-13900],[URL-jdbc:cubrid:192.168.56.101:30000:pencake:pencake:********:].
	at cubrid.jdbc.jci.UConnection.createJciException(UConnection.java:2220)
	at cubrid.jdbc.jci.UInputBuffer.<init>(UInputBuffer.java:117)
	at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1785)
	at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1797)
	at cubrid.jdbc.jci.UConnection.prepareInternal(UConnection.java:997)
	at cubrid.jdbc.jci.UConnection.prepare(UConnection.java:1035)
	at cubrid.jdbc.jci.UConnection.prepare(UConnection.java:1016)
	at cubrid.jdbc.driver.CUBRIDConnection.prepare(CUBRIDConnection.java:642)
	at cubrid.jdbc.driver.CUBRIDConnection.prepare(CUBRIDConnection.java:811)
	at cubrid.jdbc.driver.CUBRIDConnection.prepareStatement(CUBRIDConnection.java:162)
	at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:302)
	at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:302)

 

2차 해결 

이렇게 하면 batch 테이블을 체크 하지 않음. 

package com.ytech.gain.app.job.config;

import javax.sql.DataSource;

import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
	
	@Autowired
	@Qualifier("datasource")
	private DataSource dataSource;
	
	@Autowired
	@Qualifier("dataSourceTx")
	private PlatformTransactionManager transactionManager;

	public BatchConfigurer() {
		super();
	}

	@Override
	protected JobRepository createJobRepository() throws Exception {
		JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
		factory.setDataSource(dataSource);
		factory.setDatabaseType("H2"); // 지원하지 않는 DB와 유사한 지원되는 DB를 지정해준다. 
		factory.setTransactionManager(transactionManager);
		factory.afterPropertiesSet();
		return factory.getObject();
	}
	
    // 이부분을 추가
	@Override
	public void setDataSource(DataSource dataSource) {
		//super.setDataSource(dataSource);
	}
}

 

+ Recent posts