commit
4b7ab82017
@ -0,0 +1,40 @@ |
||||
# Startup Configuration Guide |
||||
|
||||
Libresonic has some system-wide configuration. These configurations are stored in the |
||||
`libresonic.properties` file. There is one exception, which is the `libresonic.home` parameter which |
||||
is supplied as a Java System Property. |
||||
|
||||
## `libresonic.properties` |
||||
These parameters are simple key-value pairs stored in a list. It is recommended that these parameters |
||||
are changed through the web interface settings page. However, they can also be modified directly. Shutdown |
||||
your server first, modify, then start it for changes to take effect. |
||||
|
||||
## Java Parameters |
||||
The `libresonic.home` parameter is a Java System Property that is not modifiable through the web interface. |
||||
It must be configured via Java startup parameters. See below for steps to do this. |
||||
|
||||
#### `libresonic.home` |
||||
This parameter dictates the folder where Libresonic will store its logs, |
||||
settings, transcode binaries, index and database if using the default H2 |
||||
database. As such it is recommended to backup this folder. |
||||
|
||||
*default: `/var/libresonic` or `C:\\music`* |
||||
|
||||
#### Setting Java Parameters on Tomcat |
||||
As described in the [RUNNING.txt](http://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt) doc provided by tomcat, |
||||
you can create a file named `setenv.sh` or for windows `setenv.bat` in the Tomcat home `bin` folder to modify the |
||||
java args. |
||||
|
||||
Here is an example of a `setenv.sh` file (`setenv.bat` has slightly different syntax): |
||||
``` |
||||
export JAVA_OPTS="$JAVA_OPTS -Dlibresonic.home=/home/andrew/.cache/libresonic-test" |
||||
``` |
||||
|
||||
#### Setting Java Parameters for Standalone Package (SpringBoot) |
||||
When running the standalone package, add `-Dlibresonic.home=YOUR_PATH_HERE` to the `java` command line right before the |
||||
`-jar` argument. Here is an example for linux (windows users will want to use their OS specific path syntax i.e. |
||||
`C:\\your\path`) |
||||
|
||||
``` |
||||
java -Dlibresonic.home=/home/andrew/libresonichome -jar libresonic.war |
||||
``` |
@ -0,0 +1,82 @@ |
||||
package org.libresonic.player.command; |
||||
|
||||
import org.libresonic.player.spring.DataSourceConfigType; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
public class DatabaseSettingsCommand { |
||||
|
||||
@NotNull |
||||
private DataSourceConfigType configType; |
||||
private String embedDriver; |
||||
private String embedPassword; |
||||
private String embedUrl; |
||||
private String embedUsername; |
||||
private String JNDIName; |
||||
private int mysqlVarcharMaxlength; |
||||
private String usertableQuote; |
||||
|
||||
public DataSourceConfigType getConfigType() { |
||||
return configType; |
||||
} |
||||
|
||||
public void setConfigType(DataSourceConfigType configType) { |
||||
this.configType = configType; |
||||
} |
||||
|
||||
public String getEmbedDriver() { |
||||
return embedDriver; |
||||
} |
||||
|
||||
public void setEmbedDriver(String embedDriver) { |
||||
this.embedDriver = embedDriver; |
||||
} |
||||
|
||||
public String getEmbedPassword() { |
||||
return embedPassword; |
||||
} |
||||
|
||||
public void setEmbedPassword(String embedPassword) { |
||||
this.embedPassword = embedPassword; |
||||
} |
||||
|
||||
public String getEmbedUrl() { |
||||
return embedUrl; |
||||
} |
||||
|
||||
public void setEmbedUrl(String embedUrl) { |
||||
this.embedUrl = embedUrl; |
||||
} |
||||
|
||||
public String getEmbedUsername() { |
||||
return embedUsername; |
||||
} |
||||
|
||||
public void setEmbedUsername(String embedUsername) { |
||||
this.embedUsername = embedUsername; |
||||
} |
||||
|
||||
public String getJNDIName() { |
||||
return JNDIName; |
||||
} |
||||
|
||||
public void setJNDIName(String JNDIName) { |
||||
this.JNDIName = JNDIName; |
||||
} |
||||
|
||||
public int getMysqlVarcharMaxlength() { |
||||
return mysqlVarcharMaxlength; |
||||
} |
||||
|
||||
public void setMysqlVarcharMaxlength(int mysqlVarcharMaxlength) { |
||||
this.mysqlVarcharMaxlength = mysqlVarcharMaxlength; |
||||
} |
||||
|
||||
public String getUsertableQuote() { |
||||
return usertableQuote; |
||||
} |
||||
|
||||
public void setUsertableQuote(String usertableQuote) { |
||||
this.usertableQuote = usertableQuote; |
||||
} |
||||
} |
@ -0,0 +1,106 @@ |
||||
/* |
||||
This file is part of Libresonic. |
||||
|
||||
Libresonic is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
Libresonic is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with Libresonic. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Copyright 2016 (C) Libresonic Authors |
||||
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus |
||||
*/ |
||||
package org.libresonic.player.controller; |
||||
|
||||
import org.libresonic.player.command.DatabaseSettingsCommand; |
||||
import org.libresonic.player.dao.AlbumDao; |
||||
import org.libresonic.player.dao.ArtistDao; |
||||
import org.libresonic.player.dao.MediaFileDao; |
||||
import org.libresonic.player.service.MediaScannerService; |
||||
import org.libresonic.player.service.SettingsService; |
||||
import org.libresonic.player.spring.DataSourceConfigType; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Controller; |
||||
import org.springframework.ui.Model; |
||||
import org.springframework.validation.BindingResult; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.ModelAttribute; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RequestMethod; |
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes; |
||||
|
||||
@Controller |
||||
@RequestMapping("/databaseSettings") |
||||
public class DatabaseSettingsController { |
||||
|
||||
@Autowired |
||||
private SettingsService settingsService; |
||||
@Autowired |
||||
private MediaScannerService mediaScannerService; |
||||
@Autowired |
||||
private ArtistDao artistDao; |
||||
@Autowired |
||||
private AlbumDao albumDao; |
||||
@Autowired |
||||
private MediaFileDao mediaFileDao; |
||||
|
||||
@RequestMapping(method = RequestMethod.GET) |
||||
protected String displayForm() throws Exception { |
||||
return "databaseSettings"; |
||||
} |
||||
|
||||
@ModelAttribute |
||||
protected void formBackingObject(Model model) throws Exception { |
||||
DatabaseSettingsCommand command = new DatabaseSettingsCommand(); |
||||
command.setConfigType(settingsService.getDatabaseConfigType()); |
||||
command.setEmbedDriver(settingsService.getDatabaseConfigEmbedDriver()); |
||||
command.setEmbedPassword(settingsService.getDatabaseConfigEmbedPassword()); |
||||
command.setEmbedUrl(settingsService.getDatabaseConfigEmbedUrl()); |
||||
command.setEmbedUsername(settingsService.getDatabaseConfigEmbedUsername()); |
||||
command.setJNDIName(settingsService.getDatabaseConfigJNDIName()); |
||||
command.setMysqlVarcharMaxlength(settingsService.getDatabaseMysqlVarcharMaxlength()); |
||||
command.setUsertableQuote(settingsService.getDatabaseUsertableQuote()); |
||||
model.addAttribute("command", command); |
||||
} |
||||
|
||||
@RequestMapping(method = RequestMethod.POST) |
||||
protected String onSubmit(@ModelAttribute("command") @Validated DatabaseSettingsCommand command, |
||||
BindingResult bindingResult, |
||||
RedirectAttributes redirectAttributes) throws Exception { |
||||
if (!bindingResult.hasErrors()) { |
||||
settingsService.resetDatabaseToDefault(); |
||||
settingsService.setDatabaseConfigType(command.getConfigType()); |
||||
switch(command.getConfigType()) { |
||||
case EMBED: |
||||
settingsService.setDatabaseConfigEmbedDriver(command.getEmbedDriver()); |
||||
settingsService.setDatabaseConfigEmbedPassword(command.getEmbedPassword()); |
||||
settingsService.setDatabaseConfigEmbedUrl(command.getEmbedUrl()); |
||||
settingsService.setDatabaseConfigEmbedUsername(command.getEmbedUsername()); |
||||
break; |
||||
case JNDI: |
||||
settingsService.setDatabaseConfigJNDIName(command.getJNDIName()); |
||||
break; |
||||
case LEGACY: |
||||
default: |
||||
break; |
||||
} |
||||
if(command.getConfigType() != DataSourceConfigType.LEGACY) { |
||||
settingsService.setDatabaseMysqlVarcharMaxlength(command.getMysqlVarcharMaxlength()); |
||||
settingsService.setDatabaseUsertableQuote(command.getUsertableQuote()); |
||||
} |
||||
redirectAttributes.addFlashAttribute("settings_toast", true); |
||||
settingsService.save(); |
||||
return "redirect:databaseSettings.view"; |
||||
} else { |
||||
return "databaseSettings.view"; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,128 @@ |
||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1" %> |
||||
<%--@elvariable id="command" type="org.libresonic.player.command.DatabaseSettingsCommand"--%> |
||||
|
||||
<html> |
||||
<head> |
||||
<%@ include file="head.jsp" %> |
||||
<%@ include file="jquery.jsp" %> |
||||
<script> |
||||
function updateShownOptions() { |
||||
$(".hideawayDatabaseOptions").hide(); |
||||
var value = $('select#configType').val(); |
||||
var objToShow = $("#" + value + "DatabaseOptions"); |
||||
if (objToShow.length) { |
||||
objToShow.show(); |
||||
} |
||||
if(value != 'LEGACY') { |
||||
$("#nonLEGACYDatabaseOptions").show(); |
||||
} |
||||
} |
||||
|
||||
$(document).ready(function () { |
||||
updateShownOptions(); |
||||
$('select#configType').on('change', function () { |
||||
updateShownOptions(); |
||||
}); |
||||
}); |
||||
</script> |
||||
</head> |
||||
<body class="mainframe bgcolor1"> |
||||
<script type="text/javascript" src="<c:url value="/script/wz_tooltip.js"/>"></script> |
||||
<script type="text/javascript" src="<c:url value="/script/tip_balloon.js"/>"></script> |
||||
|
||||
<c:import url="settingsHeader.jsp"> |
||||
<c:param name="cat" value="database"/> |
||||
<c:param name="toast" value="${settings_toast}"/> |
||||
</c:import> |
||||
|
||||
<form:form commandName="command" action="databaseSettings.view" method="post"> |
||||
<p><fmt:message key="databasesettings.moreinfo"/></p> |
||||
|
||||
<table style="white-space:nowrap" class="indent"> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.configtype"/></td> |
||||
<td> |
||||
<form:select path="configType" cssStyle="width:12em" id="configType"> |
||||
<form:option value="LEGACY" label="Legacy"/> |
||||
<form:option value="EMBED" label="Embedded JDBC"/> |
||||
<form:option value="JNDI" label="JNDI"/> |
||||
</form:select> |
||||
<c:import url="helpToolTip.jsp"><c:param name="topic" value="databaseConfigType"/></c:import> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<div id="EMBEDDatabaseOptions" class="hideawayDatabaseOptions"> |
||||
<table style="white-space:nowrap;" class="indent"> |
||||
<table style="white-space:nowrap;" class="indent"> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.embeddriver"/></td> |
||||
<td> |
||||
<form:input path="embedDriver" size="30"/> |
||||
<c:import url="helpToolTip.jsp"><c:param name="topic" value="embeddriver"/></c:import> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.embedurl"/></td> |
||||
<td> |
||||
<form:input path="embedUrl" size="58"/> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.embedusername"/></td> |
||||
<td> |
||||
<form:input path="embedUsername" size="36"/> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.embedpassword"/></td> |
||||
<td> |
||||
<form:input path="embedPassword" size="36"/> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</table> |
||||
</div> |
||||
|
||||
<div id="JNDIDatabaseOptions" class="hideawayDatabaseOptions"> |
||||
<table style="white-space:nowrap;" class="indent"> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.jndiname"/></td> |
||||
<td> |
||||
<form:input path="JNDIName" size="36"/> |
||||
<c:import url="helpToolTip.jsp"><c:param name="topic" value="jndiname"/></c:import> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
<div id="nonLEGACYDatabaseOptions" class="hideawayDatabaseOptions"> |
||||
<table style="white-space:nowrap" class="indent"> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.mysqlvarcharmaxlength"/></td> |
||||
<td> |
||||
<form:input path="mysqlVarcharMaxlength" size="8"/> |
||||
<c:import url="helpToolTip.jsp"><c:param name="topic" value="mysqlvarcharmaxlength"/></c:import> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td><fmt:message key="databasesettings.usertablequote"/></td> |
||||
<td> |
||||
<form:input path="usertableQuote" size="1" htmlEscape="true"/> |
||||
<c:import url="helpToolTip.jsp"><c:param name="topic" value="usertablequote"/></c:import> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
<p class="warning"><fmt:message key="databasesettings.jdbclibrary"/></p> |
||||
</div> |
||||
|
||||
<p class="warning"><fmt:message key="databasettings.restartRequired"/></p> |
||||
|
||||
<p> |
||||
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em"> |
||||
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'"> |
||||
</p> |
||||
|
||||
</form:form> |
||||
|
||||
</body> |
||||
</html> |
Loading…
Reference in new issue