Cloud Sql 二代发行
Cloud Sql second generation issue
我在 App engine standard environment
中有一个 java Web 应用程序 运行 使用此配置
<basic-scaling>
<max-instances>25</max-instances>
<idle-timeout>50m</idle-timeout>
</basic-scaling>
并连接到云端 Sql 第二代:
vCPUs Memory SSD Storage
2 7.5GB 31GB
并且我正在使用具有以下版本的 Eclipse link 提供程序
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.1</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
我将这些排除项放入 POM.xml
中会导致与我使用的其他库发生冲突
一切都很好,后来我将 eclipse link 的版本升级到 2.7.3,然后将更改部署到 App Engine 中,它工作正常,但 30 分钟后它开始抛出以下错误,我将版本设置回那个异常刚刚消失了 2 个月,今天我从“+02:00”更改了云 sql 秒生成的 default_time_zone到“+01:00”然后我重新启动我的数据库它工作正常 10 分钟然后开始抛出相同的异常
异常详情
它为任何 JPA 查询抛出
示例:"Select u from User u where u.facebookId = :fbid"
[e~p8belel/api:20181121t183222.414147041342026241].<stdout>: [EL Warning]: 2018-11-21 17:10:39.183--UnitOfWork(1650244092)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.1.v20171221-bd47e8f): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Column Index out of range, 2 > 1.
Error Code: 0
Call: SELECT ID, about_me, account_note, account_status, birth_date, body_type, created_time, EMAIL, facebook_access_token_expry, facebook_access_token, facebook_id, game_balance, game_last_time_play, gender, hashed_password, HEIGHT, IP, job_details, last_activity_date, LIKABILITY, NAME, phone_number, signedup_device_id, signup_token, un_serious_count, class, subscription_plan, CITY_ID, marital_status_id, NEIGHBORHOOD_ID, RELIGION_ID, collage_id, job_id, my_match_id, setting_id, univ_id FROM user_table WHERE (facebook_id = ?)
bind => [1 parameter bound]
Query: ReadAllQuery(name="User.getUserByFbId" referenceClass=User sql="SELECT ID, about_me, account_note, account_status, birth_date, body_type, created_time, EMAIL, facebook_access_token_expry, facebook_access_token, facebook_id, game_balance, game_last_time_play, gender, hashed_password, HEIGHT, IP, job_details, last_activity_date, LIKABILITY, NAME, phone_number, signedup_device_id, signup_token, un_serious_count, class, subscription_plan, CITY_ID, marital_status_id, NEIGHBORHOOD_ID, RELIGION_ID, collage_id, job_id, my_match_id, setting_id, univ_id FROM user_table WHERE (facebook_id = ?)")
用户 class 是
public class User {
@Id
String id;
@Column(nullable = false)
String name;
@Column(unique = true)
String email;
@Column(name="phone_number",unique = true)
@Convert(converter = EncryptorConverter.class)
String phoneNumber;
@Column(name="hashed_password")
String hashedPassword;
@Column(name="signedup_device_id", unique=true)
String signedUpDeviceId;
@Column(name="signup_token")
String signupToken;
@OneToOne(mappedBy = "user")
private VerificationId verificationId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "setting_id")
AccountSetting setting = new AccountSetting();
@Temporal(TemporalType.DATE)
@Column(name = "birth_date")
Date birthDate;
@ManyToOne
@JoinColumn(name="marital_status_id")
MaritalStatus maritalStatus;
@Enumerated(EnumType.STRING)
@Column(name = "account_status")
AccountStatus accountStatus;
@OneToMany(mappedBy = "user")
List<Device> devices;
@Deprecated
@ManyToOne
City city;
@ManyToOne
Neighborhood neighborhood;
Integer height;
@Column(name="body_type")
@Enumerated(EnumType.STRING)
BodyType bodyType;
@Column(name="game_balance")
Integer gameBalance = 0;
@ManyToOne
Religion religion;
@JoinColumn(name = "my_match_id")
User myMatch;
Integer likability;
@Column(name="un_serious_count")
Integer unSeriousCount;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "game_last_time_play")
Date gameLastPlay;
@Lob
@Column(name = "job_details")
@Convert(converter = EncryptorConverter.class)
String jobDetails;
@JoinColumn(name = "job_id")
Job job;
@JoinColumn(name = "univ_id")
University university;
@JoinColumn(name = "collage_id")
Collage collage;
@Lob
@Column(name = "about_me")
@Convert(converter = EncryptorConverter.class)
String aboutMe;
@Lob
@Column(name = "account_note")
@Convert(converter = EncryptorConverter.class)
String accountNote;
@Lob
@Convert(converter = EncryptorConverter.class)
@Column(name = "facebook_access_token", length = 700)
String facebookAccessToken;
@Column(name = "facebook_access_token_expry")
@Temporal(TemporalType.DATE)
Date faceBookTokenExpry;
@Column(name = "facebook_id", unique = true)
String facebookId;
@Column(name = "gender")
@Enumerated(EnumType.STRING)
Gender gender;
@Column(name = "class")
@Enumerated(EnumType.STRING)
UserClass userClass;
@OneToMany(mappedBy = "user")
@OrderBy("pictureOrder")
List<Picture> pictures = new ArrayList<Picture>();
@OneToMany(mappedBy = "user")
List<UserAnswer> answers;
@OneToMany(mappedBy = "user", orphanRemoval = true)
List<WorkHistory> work = new ArrayList<>();
@OneToMany(mappedBy = "user", orphanRemoval = true)
List<EducationHistory> education = new ArrayList<>();
@Column(name = "last_activity_date")
@Temporal(TemporalType.DATE)
Date lastActivityDate = new Date();
@Enumerated(EnumType.STRING)
@Column(name="subscription_plan")
SubscriptionPlan userPlan = SubscriptionPlan.FREEMIUM;
// getters and setters
}
我真的很抱歉这么大 post,但我真的 运行 不知道为什么会发生这个异常
我修复了它,似乎 eclipse link 从版本 2.7.1 开始有 MYSQL 数据库的问题并且它不稳定,我只是将它降级到 2.7.0 现在它工作正常
我在 App engine standard environment
中有一个 java Web 应用程序 运行 使用此配置
<basic-scaling>
<max-instances>25</max-instances>
<idle-timeout>50m</idle-timeout>
</basic-scaling>
并连接到云端 Sql 第二代:
vCPUs Memory SSD Storage
2 7.5GB 31GB
并且我正在使用具有以下版本的 Eclipse link 提供程序
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.1</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
我将这些排除项放入 POM.xml
中会导致与我使用的其他库发生冲突一切都很好,后来我将 eclipse link 的版本升级到 2.7.3,然后将更改部署到 App Engine 中,它工作正常,但 30 分钟后它开始抛出以下错误,我将版本设置回那个异常刚刚消失了 2 个月,今天我从“+02:00”更改了云 sql 秒生成的 default_time_zone到“+01:00”然后我重新启动我的数据库它工作正常 10 分钟然后开始抛出相同的异常
异常详情
它为任何 JPA 查询抛出 示例:"Select u from User u where u.facebookId = :fbid"
[e~p8belel/api:20181121t183222.414147041342026241].<stdout>: [EL Warning]: 2018-11-21 17:10:39.183--UnitOfWork(1650244092)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.1.v20171221-bd47e8f): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Column Index out of range, 2 > 1.
Error Code: 0
Call: SELECT ID, about_me, account_note, account_status, birth_date, body_type, created_time, EMAIL, facebook_access_token_expry, facebook_access_token, facebook_id, game_balance, game_last_time_play, gender, hashed_password, HEIGHT, IP, job_details, last_activity_date, LIKABILITY, NAME, phone_number, signedup_device_id, signup_token, un_serious_count, class, subscription_plan, CITY_ID, marital_status_id, NEIGHBORHOOD_ID, RELIGION_ID, collage_id, job_id, my_match_id, setting_id, univ_id FROM user_table WHERE (facebook_id = ?)
bind => [1 parameter bound]
Query: ReadAllQuery(name="User.getUserByFbId" referenceClass=User sql="SELECT ID, about_me, account_note, account_status, birth_date, body_type, created_time, EMAIL, facebook_access_token_expry, facebook_access_token, facebook_id, game_balance, game_last_time_play, gender, hashed_password, HEIGHT, IP, job_details, last_activity_date, LIKABILITY, NAME, phone_number, signedup_device_id, signup_token, un_serious_count, class, subscription_plan, CITY_ID, marital_status_id, NEIGHBORHOOD_ID, RELIGION_ID, collage_id, job_id, my_match_id, setting_id, univ_id FROM user_table WHERE (facebook_id = ?)")
用户 class 是
public class User {
@Id
String id;
@Column(nullable = false)
String name;
@Column(unique = true)
String email;
@Column(name="phone_number",unique = true)
@Convert(converter = EncryptorConverter.class)
String phoneNumber;
@Column(name="hashed_password")
String hashedPassword;
@Column(name="signedup_device_id", unique=true)
String signedUpDeviceId;
@Column(name="signup_token")
String signupToken;
@OneToOne(mappedBy = "user")
private VerificationId verificationId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "setting_id")
AccountSetting setting = new AccountSetting();
@Temporal(TemporalType.DATE)
@Column(name = "birth_date")
Date birthDate;
@ManyToOne
@JoinColumn(name="marital_status_id")
MaritalStatus maritalStatus;
@Enumerated(EnumType.STRING)
@Column(name = "account_status")
AccountStatus accountStatus;
@OneToMany(mappedBy = "user")
List<Device> devices;
@Deprecated
@ManyToOne
City city;
@ManyToOne
Neighborhood neighborhood;
Integer height;
@Column(name="body_type")
@Enumerated(EnumType.STRING)
BodyType bodyType;
@Column(name="game_balance")
Integer gameBalance = 0;
@ManyToOne
Religion religion;
@JoinColumn(name = "my_match_id")
User myMatch;
Integer likability;
@Column(name="un_serious_count")
Integer unSeriousCount;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "game_last_time_play")
Date gameLastPlay;
@Lob
@Column(name = "job_details")
@Convert(converter = EncryptorConverter.class)
String jobDetails;
@JoinColumn(name = "job_id")
Job job;
@JoinColumn(name = "univ_id")
University university;
@JoinColumn(name = "collage_id")
Collage collage;
@Lob
@Column(name = "about_me")
@Convert(converter = EncryptorConverter.class)
String aboutMe;
@Lob
@Column(name = "account_note")
@Convert(converter = EncryptorConverter.class)
String accountNote;
@Lob
@Convert(converter = EncryptorConverter.class)
@Column(name = "facebook_access_token", length = 700)
String facebookAccessToken;
@Column(name = "facebook_access_token_expry")
@Temporal(TemporalType.DATE)
Date faceBookTokenExpry;
@Column(name = "facebook_id", unique = true)
String facebookId;
@Column(name = "gender")
@Enumerated(EnumType.STRING)
Gender gender;
@Column(name = "class")
@Enumerated(EnumType.STRING)
UserClass userClass;
@OneToMany(mappedBy = "user")
@OrderBy("pictureOrder")
List<Picture> pictures = new ArrayList<Picture>();
@OneToMany(mappedBy = "user")
List<UserAnswer> answers;
@OneToMany(mappedBy = "user", orphanRemoval = true)
List<WorkHistory> work = new ArrayList<>();
@OneToMany(mappedBy = "user", orphanRemoval = true)
List<EducationHistory> education = new ArrayList<>();
@Column(name = "last_activity_date")
@Temporal(TemporalType.DATE)
Date lastActivityDate = new Date();
@Enumerated(EnumType.STRING)
@Column(name="subscription_plan")
SubscriptionPlan userPlan = SubscriptionPlan.FREEMIUM;
// getters and setters
}
我真的很抱歉这么大 post,但我真的 运行 不知道为什么会发生这个异常
我修复了它,似乎 eclipse link 从版本 2.7.1 开始有 MYSQL 数据库的问题并且它不稳定,我只是将它降级到 2.7.0 现在它工作正常