Вчера убил вечер пытаясь настроить себе ВПН-сервер для хождения с телефона. По локалке - подключается, извне - нет. Ошибок, соответственно, никаких нет в этом Андроиде, только «сбой».
Предполагаю, что нужен какой-то порт.
Сервер - SoftEtherVPN, порты слушает 992, 1194, 5555. Порты в роутере пробросил, есесна. Поэтому и непонятки.
Я в замешательстве...
Есть мысли? Как быть? Перепробовал с десяток каких-то смутных клиентов с ПлейМаркета. Ни в какую.
Два проекта в IDEA: один - SpringBoot как бэк, второй - ReactJS (сборка Webpack) как фронт. В конфиге webpack указан путь для сборки - в подпапку в static бэка.
Хочу при сборке фронта, чтобы запущенный бэк начинал отдавать на запросы bundle.js уже новый файл. Сейчас этого можно добиться только перезапуском бэка.
Код
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS)
.setCacheControl(CacheControl.maxAge(0, TimeUnit.SECONDS));
}
}
не помогает, хотя в браузере видно, что файл не грузится из кеша. Но это браузерный кеш, а как отключить кеширование в самом SpringBoot?
Господа, есть что-то свежее на сабжевую железяку-свисток? Это которая эта. Образы lubuntu лежат в сети аж 12.* релиза. Мне его не удалось обновить даже до 14.
Может, кто-то собирал сам? Или какие-нибудь bsd-системы?
PS. В тегах треш, но даже не знаю, как скастовать иначе нужную аудиторию.
Настроил через Maven - все работает: создаю новый файл с изменениями структуры, mvn flyway:migrate, все хорошо.
Но вот захотелось мне на работающей таким образом базе сделать проверки при запуске приложения. И тут...
public static void makeMigration(String folder, String jdbc, String username, String pass) {
// Create the Flyway instance
Flyway flyway = new Flyway();
flyway.setLocations(String.format("filesystem:%s", folder));
// Point it to the database
flyway.setDataSource(jdbc, username, pass);
//flyway.setBaselineOnMigrate(true);
// Start the migration
flyway.migrate();
}
Если делаю flyway.migrate();, то:
org.flywaydb.core.api.FlywayException: Found non-empty schema(s) "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
Если включаю flyway.setBaselineOnMigrate(true); или делаю flyway.baseline();, то:
org.postgresql.util.PSQLException: ОШИБКА: отношение "schema_version" уже существует
Есть проект с JPA. Сейчас его нужно хорошенько допилить. Желания дальше работать через JPA нет. Хочется jOOQ. Можно ли до момента полного замещения JPA на jOOQ использовать их совместно к одной БД (с транзакциями) в одном проекте?
Проект SpringBoot.
База для JPA и jOOQ будет одна и та же. На jOOQ уже используются новые таблицы (было реализовано в тестовом отдельном проекте, где нет JPA)
вот такой класс-читальщик, который нашел на просторах инета
import org.apache.poi.ss.usermodel.*;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by bvn13 on 01.07.2017.
*/
public class ExcelReader {
public static List<List<String>> readSpreadSheet(InputStream inputStream, Integer sheetNum) {
Workbook workBook = null;
try {
workBook = WorkbookFactory.create(inputStream);
} catch (Exception e) {
throw new RuntimeException(e);
}
Sheet sheet = workBook.getSheetAt(sheetNum);
List<List<String>> rowHolder = new ArrayList<List<String>>();
int cellNum = sheet.getRow(1).getLastCellNum();
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
List<String> cellHolder = new ArrayList<String>();
for (int j = 0; j < row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
String cellValue = parseCellValue(workBook, cell);
cellHolder.add(cellValue);
}
//add empty cells to the end if required
while (cellHolder.size() < cellNum) {
cellHolder.add(null);
}
rowHolder.add(cellHolder);
}
return rowHolder;
}
private static String parseCellValue(Workbook workBook, Cell cell) {
FormulaEvaluator evaluator = workBook.getCreationHelper().createFormulaEvaluator();
String cellValue = null;
if (cell != null) {
switch (cell.getCellTypeEnum()) {
case STRING:
cellValue = cell.getRichStringCellValue().getString();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
cellValue = cell.getDateCellValue().toString();
} else {
cellValue = new Double(cell.getNumericCellValue()).toString();
}
break;
case BOOLEAN:
cellValue = new Boolean(cell.getBooleanCellValue()).toString();
break;
case FORMULA:
cellValue = evaluator.evaluate(cell).formatAsString();
break;
}
}
return cellValue;
}
public static List<List<String>> readSpreadSheetWOnull(InputStream inputStream, Integer sheetNumber) {
Workbook workBook = null;
try {
workBook = WorkbookFactory.create(inputStream);
Sheet sheet = workBook.getSheetAt(sheetNumber);
Iterator<Row> rowIter = sheet.rowIterator();
List<List<String>> rowHolder = new ArrayList<List<String>>();
while (rowIter.hasNext()) {
Row row = (Row) rowIter.next();
Iterator<Cell> cellIter = row.cellIterator();
List<String> cellHolder = new ArrayList<String>();
while (cellIter.hasNext()) {
Cell cell = (Cell) cellIter.next();
String cellValue = parseCellValue(workBook, cell);
cellHolder.add(cellValue);
}
rowHolder.add(cellHolder);
}
return rowHolder;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static List<List<String>> readSpreadSheetWOnull(InputStream inputStream) {
return readSpreadSheetWOnull(inputStream, 0);
}
public static List<List<String>> readSpreadSheet(InputStream inputStream) {
return readSpreadSheet(inputStream, 0);
}
}
Если подсунуть 10-меговый файл, то даже на моем i7 8Gb вылетает с ошибкой:
Exception in thread "ru.bvn13.priceprocessor.workers.PriceLoaderFromFileWorker" java.lang.OutOfMemoryError: GC overhead limit exceeded
at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeObject(DeferredDocumentImpl.java:1017)
at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.synchronizeChildren(DeferredDocumentImpl.java:1755)
at com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl.synchronizeChildren(DeferredElementNSImpl.java:158)
at com.sun.org.apache.xerces.internal.dom.ParentNode.getFirstChild(ParentNode.java:229)
at org.apache.xmlbeans.impl.store.Locale.loadNodeChildren(Locale.java:1402)
at org.apache.xmlbeans.impl.store.Locale.loadNode(Locale.java:1445)
at org.apache.xmlbeans.impl.store.Locale.loadNodeChildren(Locale.java:1403)
at org.apache.xmlbeans.impl.store.Locale.loadNode(Locale.java:1445)
at org.apache.xmlbeans.impl.store.Locale.loadNodeChildren(Locale.java:1403)
at org.apache.xmlbeans.impl.store.Locale.loadNode(Locale.java:1445)
at org.apache.xmlbeans.impl.store.Locale.loadNodeChildren(Locale.java:1403)
at org.apache.xmlbeans.impl.store.Locale.loadNode(Locale.java:1445)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1385)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1370)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:370)
at org.apache.poi.POIXMLTypeLoader.parse(POIXMLTypeLoader.java:144)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:183)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:175)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:438)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:403)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:190)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:266)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:185)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:144)
at ru.bvn13.priceprocessor.utils.ExcelReader.readSpreadSheet(ExcelReader.java:18)
at ru.bvn13.priceprocessor.utils.ExcelReader.readSpreadSheet(ExcelReader.java:102)
at ru.bvn13.priceprocessor.workers.PriceLoaderFromFileWorker.readFileNewExcelFormat(PriceLoaderFromFileWorker.java:409)
at ru.bvn13.priceprocessor.workers.PriceLoaderFromFileWorker.loadFile(PriceLoaderFromFileWorker.java:294)
at ru.bvn13.priceprocessor.workers.PriceLoaderFromFileWorker.startLoadingFile(PriceLoaderFromFileWorker.java:206)
at ru.bvn13.priceprocessor.workers.PriceLoaderFromFileWorker.job(PriceLoaderFromFileWorker.java:96)
at ru.bvn13.priceprocessor.workers.AbstractWorker.run(AbstractWorker.java:52)
Тестируется и эксплуатируется в настоящий момент на Windows для MS SQL
Предназначение: хранение всех файлов бекапов на Yandex-диске в каталогах, названных согласно текущих (на момент отправки) даты и времени, автоматическая чистка старых файлов на Yandex-диске.
Утилита может работать в двух режимах:
1. Режим слежения
2. Режим ручного запуска
В режиме слежения утилита следит за изменениями файлов в указанных в настройках каталогах и отправляет их в Yandex-диск. Доступ к аккаунту Yandex-диск также указывается в настройках. Перед отправкой файла происходит чистка старых каталогов на Yandex-диске.
В режиме ручного запуска утилита копирует определенный пользователем бекап на Yandex-диск.
При появлении файла в одном из отслеживаемых каталогов утилита, запущенная службой в режиме backuper.py watcher -s с помощью nssm, происходит создание каталога вида YYYYMMDD / HHmm на Yandex-диске (корень возможно указать в настройках). В этот каталог копируется найденный файл. В настройках указано максимальное хранение файлов 250 дней. Перед копированием каждого файла происходит удаление каталогов YYYYMMDD старше 250 дней.
CREATE MATERIALIZED VIEW public.ping_pong_state AS
SELECT pp1.base_1c_id,
pp1.maxdatetime AS datetime,
pp2.ping,
pp2.pong,
pp2.total
FROM ( SELECT ping_pong.base_1c_id,
max(ping_pong.datetime) AS maxdatetime
FROM ping_pong
GROUP BY ping_pong.base_1c_id) pp1
JOIN ping_pong pp2 ON pp1.base_1c_id = pp2.base_1c_id AND pp1.maxdatetime = pp2.datetime
WITH DATA;
При выдергивании данных из этой вьюхи, такое ощущение, что она отдает не срез последних, а какие-то старые данные.
Други! Пытаюсь понять что с чем едят, читая маны. Правильно ли я понимаю, что можно только повторно отправить сообщение в очередь, указав id сообщения, но нельзя «просто отправить сообщение в очередь», используя JMX?
>java -Xmx1024m -jar PriceProcessor-1.6.5-jar-with-dependencies.jar
log4j:WARN Continuable parsing error 2 and column 22
log4j:WARN Document root element "log4j:configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 22
log4j:WARN Document is invalid: no grammar found.
ru_RU
Done
WorkerManager: start workers
WorkerManager: 3 workers started
Worker ru.bvn13.priceprocessor.workers.UploadStatusesCheckerWorker@959709, initial delay 15 sec.
Exception in Application start method java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306)
at com.sun.javafx.scene.control.skin.TextAreaSkin$ContentView.layoutChildren(TextAreaSkin.java:276)
at javafx.scene.Parent.layout(Parent.java:1087)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Parent.layout(Parent.java:1093)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene.preferredSize(Scene.java:1646)
at javafx.scene.Scene.impl_preferredSize(Scene.java:1720)
at javafx.stage.Window$9.invalidated(Window.java:846)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
at javafx.stage.Window.setShowing(Window.java:922)
at javafx.stage.Window.show(Window.java:937)
at javafx.stage.Stage.show(Stage.java:259)
at ru.bvn13.priceprocessor.MainApp.initRootLayout(MainApp.java:291)
at ru.bvn13.priceprocessor.MainApp.start(MainApp.java:227)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 1 more
Exception running application ru.bvn13.priceprocessor.MainApp
Возникает очень часто (но не каждый раз) при стартре с ключом -Xmx1024m. Без этого ключа - не встречал.
UltraESB (теперь уже Legacy версия), юниты есть. Тестовый сервер с debian 8.6, подготовил окружение, клонировал репу с uESB, а запускаться не хочет.
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [project.ultraesb.transport.file.OurFileTransportListener] for bean with name 'file-rcv' defined in file [/home/bvn13/dev/ultraesb/conf/ultra-root.xml]; nested exception is java.lang.ClassNotFoundException: project.ultraesb.transport.file.OurFileTransportListener
Смотрю, а в conf/mediation/classes нет скомпилленых классов наших юнитов.
Вот и вопрос: в IDE оно в какой-то момент само их скомпилило. А в продакшене как? Мне нужно вручную скомпилить? А как же их концепция «подхватывать налету»?
PS. с uESB я только разбираюсь.
PPS. тэг spring - потому что он используется внутри UltraESB